Передача NSManagedObject в UIViewController - PullRequest
1 голос
/ 03 января 2012

Если я передам NSManagedObject в UIViewController, NSManagedObject станет нулевым.Единственный способ обойти это - использовать запрос выборки в каждом контроллере представления, в который я хочу передать управляемый объект (их несколько), но это кажется чрезвычайно неуклюжим и подвержено ошибкам.

СпособЯ передаю управляемый объект просто для того, чтобы сказать:

viewController.subclassedManagedObject = self.subclassedManagedObject;

он действителен для себя, но в viewController он нулевой.Я не понимаю почему.Любое понимание будет высоко ценится!

Большое спасибо

Редактировать:

, чтобы добавить немного больше деталей и ясности: у меня есть сильное подклассовое свойство managedObject, называемое booking в viewController.

@property (nonatomic, strong) Booking *booking;

Это также viewController, где я установил UIManagedDocument и тому подобное.Это все отлично работает.Я хочу передать этот управляемый объект экземпляру 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;

Бронирование свойств в TableViewController я пробовал быть слабым и сильным, и ни одна из них не работает.На данный момент это так:

@property (nonatomic, weak) Booking *booking;

Большое спасибо еще раз

Ответы [ 3 ]

6 голосов
/ 03 января 2012

Вы передаете self.booking в tableViewController, но то, что вы создаете, выглядит как новая локальная переменная:

Booking *booking = [NSEntityDescription insertNewObjectForEntityForName:@"Booking" inManagedObjectContext:self.managedObjectContext];

Когда это должно быть

self.booking = [NSEntityDescription insertNewObjectForEntityForName:@"Booking" inManagedObjectContext:self.managedObjectContext];

Если это не такЧтобы это исправить, вы можете попытаться настроить NSManagedObjectContext для сохранения новых объектов, возможно, что при переходе к новому tableViewController автоматически выпущенный NSManagedObject исчезнет:

[managedObjectContext setRetainsRegisteredObjects:YES];
2 голосов
/ 03 января 2012

Вы убедились, что tableViewController не ноль?

ваш @property определенно должен быть сильным, поскольку контроллер представления становится владельцем объекта. Ссылка weak определенно обнулится.

Аналогично, я бы также поставил точку останова в отладчике и подтвердил , что [self booking] действительно указывает на действительный объект в этой точке кода .

0 голосов
/ 03 января 2012

не уверен, что это правильный путь, и у меня нет документации для цитирования. но я считаю, что вы должны создать синглтон, при открытии загрузить свои значения из вашего управляемого объекта в синглтон и использовать его в своих контроллерах uiview.

затем при закрытии сохраните синглтон в управляемом объекте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...