Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS UITableView在didReceiveMemoryWarning之后空白_Ios_Cocoa Touch_Uitableview_Didreceivememorywarning - Fatal编程技术网

iOS UITableView在didReceiveMemoryWarning之后空白

iOS UITableView在didReceiveMemoryWarning之后空白,ios,cocoa-touch,uitableview,didreceivememorywarning,Ios,Cocoa Touch,Uitableview,Didreceivememorywarning,我在这里有点不知所措,我希望有人能指出我错在哪里 我的应用程序是针对iPad的主/视图应用程序 我的MasterView继承了UITableView,只要没有didReceiveMemoryWarning,就可以正常工作。我有定制的手机内容,一切都很好。到目前为止还不错,只花了几个小时就建成了 然而,一旦我得到didReceiveMemoryWarning,self.tableView的行为似乎很奇怪。NumberOfSectionsTableView和tableView:numberOfRow

我在这里有点不知所措,我希望有人能指出我错在哪里

我的应用程序是针对iPad的主/视图应用程序

我的MasterView继承了UITableView,只要没有didReceiveMemoryWarning,就可以正常工作。我有定制的手机内容,一切都很好。到目前为止还不错,只花了几个小时就建成了

然而,一旦我得到didReceiveMemoryWarning,self.tableView的行为似乎很奇怪。NumberOfSectionsTableView和tableView:numberOfRowsInSection:方法将不再调用,当我的代码尝试选择第一项(在内存警告之后)时,如下所示:

[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] 
                animated:NO
                scrollPosition:UITableViewScrollPositionMiddle];
它与

-[UITableView ScrollToRowatineXpath:atScrollPosition:animated::行(0)超出节(0)的边界(0)。'


那么是什么原因呢?如果我的tableView的内存在内存警告期间被完全擦除,为什么不将其设置为零?另外,如何重新构建它?

您是否按照界面生成器或代码实现tableview?当您使用self时,我假设您使用带有retain的属性。检查是否在viewDidUnLoad中将此项设置为nil,并在dealloc方法中释放字段指针。如果不是的话,问题就出在其他地方,但我认为你这么做是因为这是一个很好的做法

如果您已经通过代码构建了tableview,并且在viewDidUnload中将属性设置为nil,那么您必须在收到内存警告后再次分配它。执行此操作的位置将是viewDidLoad、initWith等。。。View did load通常是更好的选择,因为只要您通过Nav或TabBarController返回,它就会被调用

如果使用interface builder并在AppDelegate中加载视图(例如在didFinishLaunchingWithOptions方法中),则除非再次调用awakeFromNib方法,否则将不会再次调用该方法。因此,在viewDidUnload中,不要将实例变量设置为nil。否则,您将失去指向interface builder tableview的指针。最后一部分可能是原因,但实际上不应该,因为这不是好的做法

如果你告诉我更多关于你的代码,我可以帮助你更具体

问候
Markus

您是否按照每个接口生成器或代码实现tableview?当您使用self时,我假设您使用带有retain的属性。检查是否在viewDidUnLoad中将此项设置为nil,并在dealloc方法中释放字段指针。如果不是的话,问题就出在其他地方,但我认为你这么做是因为这是一个很好的做法

如果您已经通过代码构建了tableview,并且在viewDidUnload中将属性设置为nil,那么您必须在收到内存警告后再次分配它。执行此操作的位置将是viewDidLoad、initWith等。。。View did load通常是更好的选择,因为只要您通过Nav或TabBarController返回,它就会被调用

如果使用interface builder并在AppDelegate中加载视图(例如在didFinishLaunchingWithOptions方法中),则除非再次调用awakeFromNib方法,否则将不会再次调用该方法。因此,在viewDidUnload中,不要将实例变量设置为nil。否则,您将失去指向interface builder tableview的指针。最后一部分可能是原因,但实际上不应该,因为这不是好的做法

如果你告诉我更多关于你的代码,我可以帮助你更具体

问候
马库斯

你好,马库斯,谢谢你的来信。很抱歉,我没有给出上下文:OSX 10.6.8,Xcode 4.2,项目使用ARC,目标是运行iOS 5.0.0的iPad2。问题是,表的内容被暴动了,还有一个数组的内容,我指望它知道要放入表中的内容。名为“docs”的数组为“nil”,因此[docs count]返回的是“nil”,而不是“0”,因此当我到达selectRowAtIndexPath时,它肯定会爆炸,因为有“nil”行,而不是“0”行。我觉得让“nil”对象接收消息而不崩溃是Objective中的一个根本错误,因为它将返回对象的类型从int更改为nil。如果崩溃发生在[docs count]行,我会确切地知道问题所在,而不是完全用另一种方法。一旦我发现了这个问题,并在viewDidLoad中重建了表,至少我正在从didReceiveMemoryWarning发生时被从我下面拉出的表中恢复过来。嗨,Markus,谢谢你的来信。很抱歉,我没有给出上下文:OSX 10.6.8,Xcode 4.2,项目使用ARC,目标是运行iOS 5.0.0的iPad2。问题是,表的内容被暴动了,还有一个数组的内容,我指望它知道要放入表中的内容。名为“docs”的数组为“nil”,因此[docs count]返回的是“nil”,而不是“0”,因此当我到达selectRowAtIndexPath时,它肯定会爆炸,因为有“nil”行,而不是“0”行。我觉得让“nil”对象接收消息而不崩溃是Objective中的一个根本错误,因为它将返回对象的类型从int更改为nil。如果崩溃发生在[docs count]行,我会确切地知道问题所在,而不是完全用另一种方法。一旦我发现这一点,并在viewDidLoad中重建表,至少我正在从didReceiveMemoryWarning发生时被从我下面拉出的表中恢复过来。