这两天写个功能模块用到tableview,功能写完测试发现每次向上滑动tableview 时程序都会crash掉。把tableview controller 部分的代码review 了很多遍,加了很多打印和断点也没有找到一点头绪。在网上搜了很久,大概知道了一些思路,就是说程序可能调用了一个被释放了的对象,但是调试了很久也没有发现是哪个对象出的错。
最后在国外的论坛上找到了一篇跟我类似问题的文章,原来问题不是出在我的tableview controller 文件里,而是在AppDelegate.m文件里。
把代码:
[self.window addSubview:tableViewController.view];改为:
[self.window setRootViewController:tableViewController];就ok了。
原因是原来的代码只retain了TableViewController 的View而没有retain整个controller,所以在执行完- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions函数后,tableViewController就被释放掉了。而我在向上滑动tableview 的时候,tableview会向tableViewController发送重画tablecell的消息,因为tableViewController已经不存在,所以导致程序crash掉了。