У меня нет четкого понимания того, как основные данные действительно работают. Возможно, это результат, с которым я столкнулся. У меня есть приложение, в котором я использую одно приложение managedObjectContext через приложение. Я знаю, что managedObjectContext поддерживает все управляемые объекты в нем, и до тех пор, пока я не сброшу контекст, объект всегда сохраняется самим контекстом. Итак, что я делаю, я получаю некоторый основной объект, такой как данные пользователя, а затем продолжаю передавать один и тот же объект во всем контроллере представления. Если происходят некоторые изменения, объект обновляется каким-либо другим кодом. Это работает практически во всех случаях.Основные данные и хранение над NSManagerObject
Но, я не держу сильный указатель на объект в любом viewcontrollers. Я просто поддерживаю слабую ссылку на него, поскольку сам объект сохраняется пулом managedObjectContext. Но я несколько раз сталкиваюсь с этой стратегией, когда объект обновляется путем синхронизации с удаленным. Мой слабый указатель становится бесполезным. В нем нет данных. Все атрибуты становятся пустыми. Хотя он показывает все имена атрибутов при входе в систему, значения равны нулю. Как я могу убедиться, что мой объект всегда обновляется и синхронизируется с основным контекстом? Является ли этот способ плохой указатель на managedObject плохой идеей. Я бы сказал, что я не сохраняю его ни в каком viewcontroller. Все контроллеры представлений используют слабый указатель.
Мой код будет выглядеть следующим образом,
В контроллере представления корневой Принести данные,
-(void)tableView:(UITableView*)tv didSelectRowAtIndexPath:(NSIndexPath*)indexPath{
User *user = [self.fetchedResultsController objectAtIndexPath:indexPath];
FirstViewController *firstViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"firstViewController"];
firstViewController.user = user;
}
FirstViewController:
@interface FirstViewController:UIViewController
@property(nonatomic, weak) User *user
@end
я сделать много вещей с объектом здесь и в то же время я могу обновить объект от rootViewController. Но, поскольку это тот же самый объект, он, похоже, обновляется большую часть времени.
Затем снова в первом виде контроллер;
-(void)tableView:(UITableView*)tv didSelectRowAtIndexPath:(NSIndexPath*)indexPath{
User *user = [self.fetchedResultsController objectAtIndexPath:indexPath];
SecondViewController *secondViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"secondViewController"];
}
SecondViewController:
@interface SecondViewController:UIViewController
@property(nonatomic, weak) User *user
@end
Здесь снова, объект ссылается слабо. Я делаю много вещей с объектом или некоторыми другими контроллерами представлений, которые могут синхронизироваться с удаленного, но он продолжает обновляться. Этот объект передается в глубокую иерархию до последнего контроллера представления, и все эти контроллеры представлений сохраняют слабые указатели на него.
В большинстве случаев это нормально. Но, много раз в моем текущем контроллере представления, даже если объект синхронизирован с сетью, он кажется нулевым, я имею в виду, что объект все еще существует со всеми описаниями свойств, но в нем нет значений. Но потом появляется через некоторое время.
Что могло случиться. Как сохранить объект, синхронизированный с корневым контекстом, и обновить, когда произойдут какие-либо изменения? Сохраняя сильный указатель, это сможет решить все мои проблемы. Наверное, это может быть из-за того, что объект не ошибается. Как я могу только обмануть объект в одном из объектов, чтобы он стал видимым для всех других объектов.
На самом деле было бы полезно ваше содействие и внимание. У меня может быть плохой английский, но если кто-то понимает мой вопрос и может выразить его лучше, я действительно был бы рад за это.:)