首先让我解释一下我的应用程序的流程,
当我启动应用程序时,我会检查用户是否已登录,如果不是我显示登录控制器,我会检查-(void) viewWillAppear:(BOOL)animated
。现在这很有效。
在我的loadView中,我访问了我的代码数据堆栈,并尝试通过单击其中一个单元格来显示在单击的单元格对象中显示的更多信息,从而在表格视图中显示fetchedObjects。
我就是这样做的。
AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [app managedObjectContext];
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Sites" inManagedObjectContext:context];
NSError *error;
[fetchRequest setEntity:entity];
fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
现在,当第一次加载视图时,我在调试器中获得了以下内容
(lldb) po fetchedObjects
(NSArray *) $1 = 0x00352860 <_PFArray 0x352860>(
<NSManagedObject: 0x352550> (entity: Sites; id: 0x34c9b0 <x-coredata://7CD0A735-BC41-4E7A-8B07-C957E6096320/Sites/p1> ; data: <fault>)
)
这似乎很好。
现在调用viewWillAppear并显示登录视图并且用户登录并从导航堆栈中弹出登录视图,然后再次调用tableview的cellforrowatindexpath,当我在那里打破我的时候我再次获取了fetchedObjects
(lldb) po fetchedObjects
(NSArray *) $3 = 0x00352860 [no Objective-C description available]
我不明白,为什么数据不会持久存在?
异常被抛出
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [fetchedObjects count];
}
fetchedObjects是该类的成员,我还没有发布它并且我从未更改它的值?
答案 0 :(得分:1)
fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
返回自动释放的对象。如果你想让它闲逛,你必须保留它或通过你的retain
ed属性访问器分配它(如果它存在(这是首选方法):
self.fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];