iPhone核心数据问题

时间:2010-05-10 22:25:26

标签: iphone core-data

这是我的第一个使用Core Data的项目,我按照Apple提供的活动教程,帮助我了解了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]]);

2 个答案:

答案 0 :(得分:1)

您应该在NSLog格式中使用%@而不是%s,这将允许Core Data对象属性正确显示(%@能够显示几乎所有内置的NSObject类)。

答案 1 :(得分:0)

代码中的另一个提示:

package = (Package *)[NSEntityDescription insertNewObjectForEntityForName:@"Package" inManagedObjectContext:moc];

是完全不必要的演员。 -[NSEntityDescription insertNewObjectForEntityForName: inManagedObjectContext:返回id这是一个通用指针。无需投射id。这一行应为:

package = [NSEntityDescription insertNewObjectForEntityForName:@"Package" inManagedObjectContext:moc];