У меня много проблем, когда я пытаюсь сохранить NSManageObject в делегате и худшие проблемы с попыткой прочитать объекты. Мой Делегат что-то вроде этого:Пытается сэкономить NSManagedObject в appDelegate
@class ViewController;
@class RootViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
NSManagedObjectModel *managedObjectModel;
NSManagedObjectContext *managedObjectContext;
NSPersistentStoreCoordinator *persistentStoreCoordinator;
Trips *trip;
Garage *car;
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;
@property (strong, nonatomic) RootViewController *rootviewcontroller;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (nonatomic, retain) Trips *trip;
@property (nonatomic, retain) Garage *car;
- (NSString *)applicationDocumentsDirectory;
- (void) setCar:(Garage *)Car;
- (void) setTrip:(Trips *)Trip;
- (Trips *) gettrip;
- (Garage *) getcar;
@end
Полные методы, чтобы установить и получить, как это:
- (void) setCar:(Garage *)Car
{
car = Car;
}
- (void) setTrip:(Trips *)Trip
{
trip = Trip;
}
- (Trips *) gettrip
{
return trip;
}
- (Garage *) getcar
{
return car;
}
В первый взгляд, когда я делаю:
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
trip = (Trips *)[NSEntityDescription insertNewObjectForEntityForName:@"Trips" inManagedObjectContext:context];
[appDelegate setTrip:trip];
Кажется работа хорошо, даже если я делаю NSLog (@ "% @", [appDelegate gettrip]); , он показывает мне объект без проблем. Но когда я пытаюсь прочитать ту же поездку с [appDelegate gettrip] в другом представлении, вообще не работает, на самом деле с NSLog говорится, что объектом является тип Garage вместо Trips.
Я не знаю, что я делаю неправильно. Помогите.
В стороне, '- [NSEntityDescription insetNewObjectForEntityForName: inManagedObjectContext:]' возвращает 'id', и поэтому вам не нужно отображать возвращаемый объект. –
Зачем проходить через все эти методы реализации rigmarole и объявлять переменные-члены для свойств поездки и автомобиля? Это сбивает с толку и может быть источником вашей проблемы. Просто установите объект в свойство и вуаля, для вас все будет обработано: 'appDelegate.trip = trip' и' appDelegate.car = car'. – Jeremy
Спасибо, Джереми. Я сделал то, что вы сказали, и это лучше, но мне кажется, что моя проблема связана с NSManagedObjectContext, потому что у меня возникли проблемы с сохранением данных, добавив [контекстный сброс], который можно сохранить, но я потерял данные, сохраненные в делегат. Я также пытаюсь использовать [context redo], но он не работает. Или сохраните мои изменения или сохраните поездку в делегате. Я не могу сделать то и другое. –