Ale*_*amb 1 cocoa-touch core-data objective-c ios5
如果我将NSManagedObject传递给UIViewController,NSManagedObject将变为null.我能看到的唯一方法就是在每个视图控制器中使用一个获取请求,我希望将托管对象传递给(有几个),但这看起来非常笨拙并容易出错.
我传递托管对象的方式只是说:
viewController.subclassedManagedObject = self.subclassedManagedObject;
Run Code Online (Sandbox Code Playgroud)
它在self中有效但在viewController中它是null.我不明白为什么.任何见解都会非常感激!
非常感谢
编辑:
添加更多细节和清晰度:我在viewController中有一个强大的子类化的managedObject属性,名为booking.
@property (nonatomic, strong) Booking *booking;
Run Code Online (Sandbox Code Playgroud)
这也是我设置UIManagedDocument等的viewController.一切正常.我想将此managedObject传递给TableViewController的一个实例,我喜欢这样:
Booking *booking = [NSEntityDescription insertNewObjectForEntityForName:@"Booking" inManagedObjectContext:self.managedObjectContext];
[self.bookingDatabase saveToURL:self.bookingDatabase.fileURL
forSaveOperation:UIDocumentSaveForOverwriting
completionHandler:^(BOOL success) {
if (!success)
{
NSLog(@"didn't work");
}}];
TableViewController *tableViewController = segue.destinationViewController;
tableViewController.managedObjectContext = self.managedObjectContext;
tableViewController.booking = self.booking;
tableViewController.bookingDatabase = self.bookingDatabase;
Run Code Online (Sandbox Code Playgroud)
TableViewController中的房产预订我试图既弱又强,既不工作.目前它是这样的:
@property (nonatomic, weak) Booking *booking;
Run Code Online (Sandbox Code Playgroud)
非常感谢再次
您正在将self.booking传递给tableViewController,但您创建的内容看起来像一个新的局部变量:
Booking *booking = [NSEntityDescription insertNewObjectForEntityForName:@"Booking" inManagedObjectContext:self.managedObjectContext];
Run Code Online (Sandbox Code Playgroud)
什么时候应该
self.booking = [NSEntityDescription insertNewObjectForEntityForName:@"Booking" inManagedObjectContext:self.managedObjectContext];
Run Code Online (Sandbox Code Playgroud)
如果这不能解决问题,您可以尝试设置NSManagedObjectContext以保留新对象,当您转换到新的tableViewController时,自动释放的NSManagedObject可能会消失:
[managedObjectContext setRetainsRegisteredObjects:YES];
Run Code Online (Sandbox Code Playgroud)