从用户输入向持久存储添加对象

时间:2010-07-29 16:47:03

标签: iphone core-data

好的,lemme开始说我是新来的!大声笑我已经尽职尽责地研究了这些主题(迄今为止有4本书和许多视频)并且搜索了几个小时,但仍未找到答案。

我觉得我对核心数据,或至少是后端数据库方面有深刻的理解。我已经构建了我的应用程序,并且已经构建了我的模型我的应用程序有一个Tabbar控制器以及每个单独选项卡的导航控制器。

我的应用程序将有一个项目表视图,用于填充Core Data中这些项目的名称。选择项目后,navController会弹出一个详细视图,该视图会加载该项目的其余数据。

当用户点击+添加项目时,我需要弹出另一个带有字段的View Controller来添加名称和详细信息(它可以)。但是,我似乎无法获得这些细节。我想我需要将用户输入转换为NSSet,然后将该NSSet引入持久性存储,但是方法声明就是我的意思!目前,我的代码看起来像......

- (IBAction) save:(id)sender {
 NSLog(@"Save pressed");

 if (itemName != nil) {

  [itemName removeObject:itemName];
  self.item = nil;  //This will release our reference also
 }
 //Create a new item set for the new values
 NSSet* newItem = [[NSSet alloc] initWithSet:newItem];

 [self didChangeValueForKey:@"itemName"];
 [self didChangeValueForKey:@"detailItem1"];
 [self didChangeValueForKey:@"detailItem2"];

 //Add it to the master item array and release our reference
 [itemArray addObject:newItem];
 [newItem release];

 //Sort the array since the name might have changed with an existing item or a new one
 NSSortDescriptor *nameSorter = [[NSSortDescriptor alloc] initWithKey:@"itemName" ascending:YES selector:nil];

 [itemArray sortUsingDescriptors:[NSArray arrayWithObject:nameSorter]];
 NSLog(@"Array sorter");
 [nameSorter release];

 //then pop the detailed view controller

 [self dismissModalViewControllerAnimated:YES];
}

我在Core Data上找到的所有文档都指向了填充现有数据库的方向,而不是接受用户输入。因此,如果我在接近我的方法并且答案不仅仅是一个简单的答案,请指出我正确的方向!!

此外,我已将项目添加到我的Core Data商店,该商品已成功保留。但是,我的应用程序中尚未创建sqlite DB,我认为这是自动发生的。所以我可能遇到的问题比我想象的要多!

到目前为止,我发现这个网站是一个巨大的帮助,即使我的声誉不允许我评价答案!

无论如何,提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在大多数Core Data实现中,除非您同时向关系添加多个托管对象,否则不直接处理集。我不确定你在这里想做什么。

在显示的代码中,您不会执行与Core Data相关的任何操作。您没有上下文,并且不会在上下文中插入可以使用新数据填充的新托管对象。实际上,您似乎根本没有任何托管对象。

我建议您查看Xcode中基于导航的项目模板。它显示了如何设置Core Data堆栈以及如何添加和删除tableview中显示的对象。