我是核心数据的新手,我遇到了一些麻烦。我正在尝试存储一个对象(最近的地址)。这是我的代码:
NSError *error;
recentSearch = [[RecentSearch alloc] init];
[recentSearch setName:[searchTextField text]];
[recentSearch setDate:[NSDate date]];
NSManagedObjectContext *context = [recentSearch managedObjectContext];
if(![context save:&error])
{
NSLog(@"Not saved. Error: %@",[error description]);
}
else
{
NSLog(@"Saved");
}
我认为这不起作用。这段代码有什么问题吗? recentSearch是NSManagedObject
。我的代码打印Not saved. Error: (null)
。非常感谢任何帮助。
答案 0 :(得分:3)
只需快速浏览一下;您需要使用NSManagedObject的initWithEntity:insertIntoManagedObjectContext:初始化NSManagedObject,从而实际将其插入上下文中。我建议你看看The NSManagedObject class reference和Apple's Core Data programming guide。我发现两者都非常有帮助。
答案 1 :(得分:1)
你从哪里获得上下文?
您以非标准方式创建NSManagedObject。
通常,您会要求CoreData获取带有NSEntityDescription的NSManagedObject。 您可以使用NSEntityDescription entityForName:inManagedObjectContext:shortcut
来完成此操作NSEntityDescription *entity = [NSEntityDescription entityForName:@"RecentSearch" inManagedObjectContext:self.moc];
其中self.moc是在应用程序初始化时创建的NSManagedObject上下文。 在app delegate中启动具有CoreData支持的项目时,会包含一段示例代码。
基本上,这会向您的CoreData模型(NSManagedObjectModel)询问在那里定义的实体。 以上内容用于在CoreData中查询内容。
要将新对象插入CoreData存储,您可以使用快捷方式
NSManagedObject *myManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"RecentSearch" inManagedObjectContext:self.moc];
现在你的内存中存在一个新的托管对象。该对象可以填充数据,并在您调用[self.moc save:& error]时将其写入底层持久存储;
希望这有点帮助。