试图在appDelegate中保存NSManagedObject

时间:2012-01-04 19:21:53

标签: iphone objective-c ios core-data nsmanagedobject

当我尝试在委托中保存NSManageObject时,我遇到了很多麻烦,并且尝试读取对象时遇到了最严重的问题。 我的代表是这样的:

@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。

我不知道我做错了什么。帮助

4 个答案:

答案 0 :(得分:3)

您是否确定在创建项目后保存上下文?如果你不保存它,那么我认为你的新实体没有得到妥善保存。在代码中,您只是在上下文中创建对象,但您必须保存上下文以保持其持久性:

NSError *error = nil;
if(![self.managedObjectContext save:&error]){
  //Handle error
}

我希望这有帮助!

答案 1 :(得分:1)

如果NSLog报告的是其他对象,那么您需要查看创建Garage实体的位置。

也许你有一个简单的复制和粘贴错误?

答案 2 :(得分:0)

在创建要保存的对象时,看起来您实际上并未将对象保存到持久存储中。

试试这个:

if (![managedObjectContext save:&error]) {
    NSLog(@"ERROR: %@", [error userInfo]);
} else {
    NSLog(@"EVERYTHING SHOULD HAVE SAVED PROPERLY");
}

现在当你在其他视图中读取managedObject时,它应该在那里。

答案 3 :(得分:0)

您的自定义设置器是否存在内存管理问题?

他们需要

吗?
- (void)setTrip:(Trip *)Trip {
    self.trip = Trip;
}

即。 self.trip =而不仅仅trip =使用该属性 - 否则我认为它不会保留您的旅行对象并且会自动释放。然后,当你稍后使用它时,其他东西将在那个记忆位置。

免责声明 - 我仍然没有100%使用ARC,所以我可能错了。值得一试!