在这样的变化之后核心数据是否会保存?

时间:2012-03-30 13:13:41

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

我的应用程序中有CoreData,带有一个Entry类,其中包含一个NSOrdered的Media类。

然后我有了这个代码,用于向NSOrderedSet添加一个新的Media项:

-(void)addImage:(UIImage *)image isInPhotoLibrary:(BOOL)isInPhotoLibrary {

    Media *media = [[Media alloc] init];
    media.type = @"Image";
    media.originalImage = UIImageJPEGRepresentation(image, 1.0);
    media.isInPhotoLibrary = [NSNumber numberWithBool:isInPhotoLibrary];

    [self addMediaObject:media];

}

这会自动保存更改,还是我必须自己保存。如果是这样,那么我是否需要传递一个上下文来做这个,还是有另一种方式?

2 个答案:

答案 0 :(得分:2)

不,此代码根本没有任何核心数据引用。

Media是NSManagedObject吗?如果是这样,你需要像这样创建它:

Media *media = [NSEntityDescription insertNewObjectForEntityForName:@"Media" inManagedObjectContext:context];

这将把它放在您的托管对象上下文中。

如果您想要保留它,则需要在托管对象上下文中调用save:。

编辑......

在Entry类中,您可能会使用生成的方法将对象添加到NSSet。它将在Entry头文件

中的类别(CoreDataGeneratedAccessors)中
- (void)addMediaObject:(Media *)value;

答案 1 :(得分:1)

不,它不会..如果你想在Core数据中保存对Database的更改,你必须为此调用save函数..我假设MediaNSManagedObject类。要将更改保存到persistent store,您必须调用save方法。在此之前,这些更改只是暂时存在于您的scratch board/ ManagedObjectContext

这是我保存更改的方式:

Worker *worker =  (Worker *)[NSEntityDescription insertNewObjectForEntityForName:@"Worker" inManagedObjectContext:self.managedObjectContext];

worker.name=txtContact.text;
worker.address=txtAddress.text;
worker.zipCode=txtZip.text;
worker.city=txtCity.text;
worker.mobile=txtMobile.text;

 NSError *error;

if (![managedObjectContext save:&error]) 
{
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}