我对我在程序中遇到的一个奇怪的错误感到很开心。
我有tableViewController
navigationBar
。当用户点击ADD
上的navigationBar
按钮时,系统会显示模式tableViewController
。此viewController
CANCEL
上有一个navigationBar
按钮(通过授权取消viewController
)
tableViewController
的自定义单元格包含UIButton
,UITextField
和UITextView
。
错误是由遵循这一系列操作(而不是其他操作)引起的:
UITextView
(位于其中一个单元格中)中输入了一些文字tableView
。tableViewController
,再次点击ADD
按钮,我收到exec_bad_access
错误。
没有其他任何原因导致此错误。
如果我尝试使用UITextField
完全相同的程序,那么事情就好了。
此外,如果我从上面的序列中排除任何列出的步骤,那么一切都很好。
我很困惑。这可能是个错误吗?
我尝试使用NSZombie
找出导致错误的原因。这是我在控制台中看到的:
MyApp[14402:207] *** -[UIWebDocumentView isKindOfClass:]: message sent to deallocated instance 0x200a800
我的代码不多;单元格在界面构建器中创建。这是调出modalViewController
- (void)createNewEntry:(id)sender {
CreateNewEntryViewController *createNewEntryVC = [[CreateNewEntryViewController alloc] initWithNibName:@"CreateNewEntryViewController" bundle:nil];
createNewEntryVC.delegate = self;
UINavigationController *createNewEntryNavigationController = [[UINavigationController alloc] initWithRootViewController:createNewEntryVC];
[createNewEntryVC release];
[self presentModalViewController:createNewEntryNavigationController animated:YES];
[createNewEntryNavigationController release]; }
答案 0 :(得分:1)
我找到了问题的解决方案,也许它也会解决你的问题。 (看看我对这个问题的回答:) UIButton, created by Interface Builder, is crashing
具体来说,如果您的按钮有任何图像,请尝试从项目中删除它们,获取新副本,重命名它们,将它们重新添加到项目中,然后再将它们挂起。似乎在我的案例中有效。
(不是答案,但是......)对于它的价值,我收到了类似的信息。也许添加我所看到的可能有助于弄清楚这一切。我在模拟器和设备上都得到了这个。
-[UIImage isKindOfClass:]: message sent to deallocated instance 0x1661f0
这条消息对我来说并不总是一致的,有时候它会保留一个无效的实例或其他一些类似的东西。这些都不是我自己做的事情,而是幕后的事情。
-[UIImage retain]: message sent to deallocated instance 0x3b621a0
这是我要被转储的代码(就像你,我正在显示一个模态对话框,虽然我的是自定义UIView)。在我的情况下,我强迫运行循环等待用户响应,如下所示:
[modalDialog showInView:self.view
title:@"Illegal Move"
message:message
cancelText:@"Cancel"
proceedText:@"Cheat"];
while (waitingForDialogToDismiss == YES) {
//this line is where NSZombies puts me:
[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode
beforeDate: [NSDate dateWithTimeIntervalSinceNow:1.5]];
}
这个模态对话框完全由笔尖构建,并且有几个按钮图像并且几乎总是正确显示。但是,如果我尝试通过在出现之前点击许多不同的UI元素来“匆匆忙忙”,我可以在30-40%的时间内得到此错误。有一次,即使对话框出现,其“取消”按钮的图形也是错误的。
看起来似乎并不总是正确地加载所有内容,或者可能是及时加载。
目前,我将尝试重写一堆代码以删除NSRunLoop业务。我们会看到。
NSRunLoop肯定不是问题。我把它缩小了很多,并在这里开始了一个新问题:UIButton, created by Interface Builder, is crashing
答案 1 :(得分:1)
我有同样的问题(或一个非常相似的问题)。
在我的情况下发生了崩溃,因为我已经实现了UITextView委托方法textViewShouldEndEditing:始终返回NO。
答案 2 :(得分:1)
就我而言,我使用的是CustomTextView,如下所述:http://www.iphonedevsdk.com/forum/iphone-sdk-development/4864-adding-border-uitextview.html
问题是[backgroundImage release];
行。它应该是[myImageView release];
我知道这与原来的问题相去甚远,但我的搜索引导我到这里,所以希望这有助于将来。
答案 3 :(得分:1)
我有同样的问题,我的应用程序因为TableView数据源方法崩溃,请确保行或标题的视图不是autorelease.I通过删除自动释放修复
答案 4 :(得分:0)
在这种情况下,我通常会开始注释掉代码,直到它停止破坏为止。然后你知道问题出在哪里。我将从CreateNewEntryViewController中的任何发布语句开始,即使是那些看似平凡的语句
答案 5 :(得分:0)
这肯定是一个内存管理问题,正如coneybeare所说,很可能是CreateNewEntryViewController释放其对象的方式的问题。
问题:
另外,如果您可以发布更多代码,那将会有所帮助。
可能值得追求的另一件事是,正如已经建议的那样,开始简化/评论代码直到它工作,然后回溯你的步骤。也许开始从你的IB文件中删除对象,只用一个取消按钮使CreateNewEntryViewController变为空白,看看是否有效。
答案 6 :(得分:0)
如果您不小心在模态控制器的dealloc方法中调用[delegate release],也会发生这种情况。您的模态控制器将退出,但您将在父控制器中遇到错误的访问崩溃。通常你使用类似的东西:
@property(nonatomic,assign)id delegate;
在你的实现中用@synthesize覆盖它但不释放它 - 你的模态VC没有副本。