我正在构建我的应用程序而且我是一个非常的菜鸟,所以请原谅我缺乏信息!
我能够在某些步骤中使我的应用程序崩溃才能重现,但有时只能。当它崩溃时,它会在main.m文件中执行:
我用" Throw"设置了一个异常断点。并分别与" Catch"并且它实际上并没有发现崩溃发生的任何特定代码行。
我如何找出导致此问题的原因或代码行?
我在iPhone 5s和6 Plus上进行测试,两者都崩溃了。
更新
我刚刚对此进行了一些测试,这是该应用的工作流程。
我有UITableViewController
(称为更多标签)。我点击UIViewController
(称为主题),然后在那里有一个按钮。我点击该按钮,它会调用UIAlertView
。我点击非取消按钮,它会调出另一个UIViewController
(称为IAP)。有UIButton
的价格和UIBarButtonItem
名为取消。如果我单击取消,它将解除IAP UIViewController并返回主题UIViewController。
IAPViewController上的UIButton
动态调用另一个名为Unlimited Entries的UIViewController
的价格。
如果在价格加载到UIButton
之前点击取消按钮,我会注意到崩溃。
使用Zombies,崩溃控制台显示:
2015-04-29 10:21:33.775 -[UnliimitedEntriesPurchase retain]: message sent to deallocated instance 0x174e4f4b0
在viewDidLoad
的{{1}}中,我有:
IAPViewController
我创建了一个属性:[self.unlimitedEntriesPurchase validateProductIdentifiers];
并且我认为这是问题所在。
我希望这是有道理的,有助于确定问题所在。
在@property (nonatomic, strong) UnliimitedEntriesPurchase *unlimitedEntriesPurchase;
价格加载之前,用户将进入IAP并单击取消按钮(以解除IAPViewController
)的罕见情况。但是,这是我想解决的问题,而不是发布这个明显的问题。
更新2
在我的IAPViewController中,我有一个自定义setter:
UIButton
通过在AppDelegate中设置alloc和init,if语句在此处不会生效,因此自定义委托永远不会被设置。
答案 0 :(得分:2)
最可能的原因是你正在向一个解除分配的对象发起一个动作,你必须这样做:
产品--->简介--->僵尸(在乐器中)
然后检查仪器工具崩溃的对象是什么。
您可以在其他地方重新分配对象,作为示例我将向您展示如何在AppDelegate中重新分配它,首先您必须在AppDelegate.h中添加它
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Data.SqlClient.SqlException: Invalid @eligible_ind value
at Tessitura.WebAPI.Tessitura.UpdateGiftAidDeclaration(String sSessionKey, String sNotes, Int32 iGiftaidType, Int32 iN1N2Ind, Int32 iContactMethod, Int32 iIneligibleReason, Int32 iDocumentStatus, DateTime dStartDate, DateTime dEndDate, Char cEligibleInd, Char cCreateNew)
--- End of inner exception stack trace ---
那是你的AppDelegate.m
@property (nonatomic, strong) UnliimitedEntriesPurchase *unlimitedEntriesPurchase;
+ (AppDelegate*) sharedDelegate;
在视图控制器中,您必须导入AppDelegate.h并像这样分配您的对象
+ (AppDelegate*) sharedDelegate {
return (AppDelegate*)[UIApplication sharedApplication].delegate;
}
之后你可以触发所有的unlimitedEntriesPurchase方法因为它永远不会被释放,如果你有什么问题可以解雇[AppDelegate sharedDelegate] .unlimitedEntriesPurchase
答案 1 :(得分:-3)
解决方案非常简单,但您能否先回答以下两个问题 -
你为什么不使用ARC?如果您使用ARC而不是手动保留/释放,则不会遇到此问题。
为什么要触发另一个viewcontroller(UnlimitedPriceEntries)来计算价格。 ViewControllers不应该用于业务逻辑。相反,你应该编写另一个NSObject类来进行这些计算,并在IAP viewcontroller中使用它。
我希望这可以解决你的问题。