使用核心数据存储对象

时间:2011-08-15 05:23:41

标签: iphone objective-c ios core-data

我是核心数据的新手,我遇到了一些麻烦。我正在尝试存储一个对象(最近的地址)。这是我的代码:

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)。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

只需快速浏览一下;您需要使用NSManagedObject的initWithEntity:insertIntoManagedObjectContext:初始化NSManagedObject,从而实际将其插入上下文中。我建议你看看The NSManagedObject class referenceApple'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]时将其写入底层持久存储;

希望这有点帮助。