从获取的核心数据中获取值

时间:2011-01-12 03:38:44

标签: iphone objective-c

感谢这个论坛上的精彩人物,我已经克服了大部分核心数据的困境。

然而,一个人坚持,我确信这是一个简单的解决方案。

我有一个配方应用程序,可以在加载时解析XML文档并将数据放入Core Data。

然后我在核心数据中搜索特定的食谱,配料等。

一切都在处理一个例外......我无法对我检索的数据做任何事情。

例如,我在核心数据中搜索“茄子”并在流程结束时获取此信息:

  "<RecipeData: 0x6112a40> (entity: RecipeData; id: 0x6113880 <x-coredata:///RecipeData/tCDE9A0EE-DA3F-4BD0-AEF8-3C038586991D4> ; data: {\n    ingredients = \"Eggplant|Cheese|Tomatoes|\";\n    name = \"Eggplant Parm\";\n    time = 40;\n})"

如何从中获取信息?我尝试循环,但这导致应用程序崩溃:

for (NSString* key in selectedRecipe) {
        id value = [selectedRecipe objectForKey:key];
        NSLog(@"IN LOOP: %@", value);

    }

有什么建议吗?

感谢您的时间。

2 个答案:

答案 0 :(得分:0)

使用Core Data,如果您从模型创建了一个已定义的“Recipe”类,您应该能够像任何其他属性一样读入属性/属性:

someRecipe.ingredients = "Eggplant";

只有当selectedRecipe是字典时,您的上述代码才有效。除此之外,我们需要看看你的实现:)

我发现这是一个好的开始:

http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html

答案 1 :(得分:0)

您应该已经从模型中定义了RecipeData类,并且已经设置了合成属性。将它包含在文件中,然后将地址包含在这样的结果中:

for (RecipeData *recipeData in yourFetchedResults) {
    NSLog(@"The name is %@", recipeData.name);
    NSLog(@"The ingredients are %@", recipeData.ingredients);
}

等。显然,您将使用获取结果的实际名称代替yourFetchedResults。

如果您还没有定义RecipeData类,则可以轻松自动生成它:

  1. 点击.xcdatamodel中的RecipeData 实体,然后选择它。

  2. 右键/按住Control键并点击项目中您要创建班级的文件夹或群组,然后选择新文件

  3. 从提供的模板中选择托管对象类,然后单击“下一步”。

  4. 选中您要为其生成类的实体旁边的框,然后单击“确定”。

  5. Poof,你已经完成了完整的类,属性。