【发布时间】:2012-06-29 11:29:47
【问题描述】:
我需要将一个由CoreData管理的对象传递给一个视图,所以我在UITableViewController类的后代中创建了一个相同类型的属性:
@property (strong) Event *udalostTermin;
在@interface 和
@synthesize udalostTermin;
在 @implementation 中并在视图的 pushViewController:animated: 调用之前填充此属性。
在 viewDidLoad 中,一切都还可以,打印说:
<Event: 0x868c160> (entity: Event; id: 0x8684220
<x-coredata:///Event/t22D3C10C-1BFC-40DE-918F-0E12A5473CA03> ; data: {
createDate = "2012-06-29 11:21:37 +0000";
doctor = nil;
end = "2012-06-29 11:21:37 +0000";
等等。但是当应用程序运行到 tableView:cellForRowAtIndexPath: 我需要显示数据的地方时,对象的打印显示:
<Event: 0x868c160> (entity: Event; id: 0x8684220
<x-coredata:///Event/t22D3C10C-1BFC-40DE-918F-0E12A5473CA03> ; data: <fault>)
之前没有明确地对对象做任何事情,因此对象给了我错误的空数据。请问我做错了什么?
【问题讨论】:
-
这里有两个不同的东西:一个对象变成了一个故障和错误的数据。即使它是一个错误,当你要求它时它仍然应该得到正确的数据。当您尝试访问
Event的属性时,您会看到什么? (另外,您可以在Event中创建一个didTurnIntoFault方法并在其中放置一个断点以查看它被调用的原因。) -
在 viewDidLoad 中,
po [udalostTermin createDate]给出了(id) $2 = 0x08647be0 2012-06-29 12:28:06 +0000。在 tableView:cellForRowAtIndexPath: 中它给出了(id) $3 = 0x00000000 <nil>。当应用程序停止在 didTurnIntoFault:, NSLog: 上调用自我打印<Event: 0x807ff60> (entity: Event; id: 0x805bc00 <x-coredata://6C8D076F-BC40-4DB0-894F-BD5175E1EE33/Event/p1> ; data: { createDate = nil; doctor = nil; end = nil;等。 -
我的想法已经不多了。 :) 在
didTurnIntoFault中,如果你输入NSLog(@"didTurnIntoFault: %@", [NSThread callStackSymbols]);,它会提示为什么调用它吗? -
打印(缩短):0 -[Event didTurnIntoFault] + 51 1 -[NSFaultHandler turnObject:intoFaultWithContext:] + 555 2 -[NSManagedObjectContext reset] + 803 3 -[UIUdalostDetail viewWillDisappear:] + 505
UIUdalostDetail是“旧”视图,正在为新视图让位。NSManagedObjectContext reset可能会破坏数据——但即使在新视图中我也想使用它们。你能帮忙吗?
标签: objective-c core-data ios4