iPhone核心数据问题
问题描述:
这是我第一个使用Core Data的项目,我遵循Apple提供的事件教程,帮助我了解iPhone中核心数据的基本知识。iPhone核心数据问题
但现在,在我的项目上工作,我有一个问题,将数据添加到我的数据库。
当我创建一个对象并设置数据时,如果我尝试恢复它,系统会返回一个奇怪的字符序列。
这是我在日志中看到,如果我尝试登录它:
2010-05-11 00:16:43.523 FG[2665:207] Package: ‡}00å
2010-05-11 00:16:43.525 FG[2665:207] Package: ‡}00å
2010-05-11 00:16:43.526 FG[2665:207] Package: ‡}00å
2010-05-11 00:16:43.527 FG[2665:207] Package: ‡}00å
2010-05-11 00:16:43.527 FG[2665:207] Package: ‡}00å
2010-05-11 00:16:43.527 FG[2665:207] Items: 5
什么样的问题可能是这个?
编辑:
这是产生错误的部分代码:
package = (Package *)[NSEntityDescription insertNewObjectForEntityForName:@"Package" inManagedObjectContext:moc];
theNodes = [doc nodesForXPath:@"//pack" error:&error];
for (CXMLElement *theElement in theNodes)
{
// Create a counter variable as type "int"
int counter;
// Loop through the children of the current node
for(counter = 0; counter < [theElement childCount]; counter++) {
if([[[theElement childAtIndex:counter] name] isEqualToString: @"id"])
[package setIdPackage:[[theElement childAtIndex:counter] stringValue]];
if([[[theElement childAtIndex:counter] name] isEqualToString: @"title"])
[package setPackageTitle:[[theElement childAtIndex:counter] stringValue]];
if([[[theElement childAtIndex:counter] name] isEqualToString: @"category"])
[package setCategory:[[theElement childAtIndex:counter] stringValue]];
if([[[theElement childAtIndex:counter] name] isEqualToString: @"lang"])
[package setLang:[[theElement childAtIndex:counter] stringValue]];
if([[[theElement childAtIndex:counter] name] isEqualToString: @"number"]) {
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:[[theElement childAtIndex:counter] stringValue]];
[f release];
[package setNumber:myNumber];
}
}
}
NSLog([NSString stringWithFormat:@"=== %s ===\nID: %s\nCategory: %s\nLanguage: %s",[package packageTitle], [package idPackage] ,[package category],[package lang]]);
答
你应该使用%@,而不是在你的NSLog格式%S,这将允许核心数据对象属性显示正确(%@能够显示几乎每个内置的NSObject类)。
+0
多么愚蠢的错误......你是对的!谢谢! – bontoJR 2010-05-18 08:58:19
答
另一个秘诀在你的代码:
package = (Package *)[NSEntityDescription insertNewObjectForEntityForName:@"Package" inManagedObjectContext:moc];
是一个完全不必要的演员。 -[NSEntityDescription insertNewObjectForEntityForName: inManagedObjectContext:
返回一个通用指针id
。无需投掷id
有史以来。此行应为:
package = [NSEntityDescription insertNewObjectForEntityForName:@"Package" inManagedObjectContext:moc];
直到您发布代码才会知道。看起来像一个编码问题,但。 – Jordan 2010-05-10 23:29:31
没有足够的信息,提供一些关于你在做什么的更多细节,也许有人可以提供帮助。 – 2010-05-11 16:57:28
是的,增加了产生问题的代码部分 – bontoJR 2010-05-17 20:18:43