我的应用程序中有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];
}
这会自动保存更改,还是我必须自己保存。如果是这样,那么我是否需要传递一个上下文来做这个,还是有另一种方式?
答案 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函数..我假设Media
是NSManagedObject
类。要将更改保存到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]);
}