代码之家  ›  专栏  ›  技术社区  ›  bontoJR

iPhone核心数据问题

  •  0
  • bontoJR  · 技术社区  · 15 年前

    这是我的第一个核心数据项目,我遵循了苹果提供的事件教程,帮助我了解了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 回复  |  直到 15 年前
        1
  •  1
  •   Martin Cote    15 年前

    您应该在nslog格式中使用%@而不是%s,这将允许核心数据对象属性正确显示(%@能够显示几乎所有内置nsobject类)。

        2
  •  0
  •   Marcus S. Zarra    15 年前

    代码中的另一个提示:

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

    是完全不必要的演员。 -[NSEntityDescription insertNewObjectForEntityForName: inManagedObjectContext: 返回一个 id 这是一个通用指针。无需铸造 身份证件 曾经。此行应为:

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