【问题标题】:"Message sent to deallocated instance" error“消息发送到释放的实例”错误
【发布时间】:2013-11-27 12:51:22
【问题描述】:

我正在为 iOS 7 优化一个旧应用程序,并且必须处理我以前从未处理过的非 ARC 代码。问题在于应用内购买,使用库 MKStoreKit。该应用程序正在使用它的旧版本和修改版本。我不能使用较新的版本,因为无法访问服务器。 导致错误的代码行是:

[MKStoreManager sharedManager];

错误本身是:

-[MKStoreManager retain]: message sent to deallocated instance 0x145e6ba0

我使用了 NSZombie,这是我得到的:

因此,我们将不胜感激任何帮助。我已经花了三天的时间,试图解决这个问题。

更新: MKStoreManager.m: http://pastebin.com/ZppTkxmN

MKStoreManager.h: http://pastebin.com/TJVM7UdN

导致错误的行:

【问题讨论】:

  • 调用sharedManager时是否出现此错误?你有那个修改版的 MKStoreKit 的源代码吗? 3 天似乎足以学习非 ARC,你知道保留发布的东西,对吧?
  • 我已经用 MKStoreManager 代码更新了这个问题。我当然有非 ARC 的基本知识,但似乎还不够。
  • 我建议从断点导航器添加异常断点。它将向您显示哪一行引发了该异常。 sharedManager 方法看起来像一个有效的方法。
  • 我已经试过了。用截图更新了问题。
  • 你能在sharedManager中设置断点吗?看起来allocWithZone: 中的@synchronized 可能会导致死锁。我将使用 Apple 推荐的 GCD 单例模式切换此代码。

标签: ios objective-c in-app-purchase mkstorekit


【解决方案1】:

你为什么不从这个链接下载 MKStoreKit 的 ARC 版本并替换你项目中的新库并玩得开心。

https://github.com/MugunthKumar/MKStoreKit

希望对你有帮助。

【讨论】:

  • 如前所述,我不能使用新版本的库,因为它的改动太多,服务器无法使用它。
  • @igrekde 您可以做的是,在项目的构建阶段将 -fno-objc-arc 标签添加到这些非 ARC 文件中。它会工作:)
  • 它不起作用,因为该应用程序使用第三方服务器进行应用内购买。服务器代码适用于旧版本的库。
  • 第三方服务器如何影响 NON-ARC 代码文件。我真的无法弄清楚。
  • 你运行分析器了吗?有没有发现什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 2011-06-16
  • 2013-08-30
相关资源
最近更新 更多