【问题标题】:Accessing NSString properties of a Core Data entity访问核心数据实体的 NSString 属性
【发布时间】:2009-08-24 18:08:03
【问题描述】:

我正在核心数据领域中迈出第一步(而且我对 iPhone 开发也很陌生),我发现了一种我无法解释的行为。 我声明了一个 NSManagedObject 的子类并定义了一些属性,其中一些是 NSString * 类型,MyObject.h 类似于:

@interface MyObject : NSManagedObject {

}

@property (nonatomic, retain) NSString *contentFile;
@property (nonatomic, retain) NSString *contentPath;
@property (nonatomic, retain) NSDate *creationDate;
@property (nonatomic, retain) NSString *name;

@end

现在,如果我尝试创建一个对象实例并为 name 属性分配一个值,当我尝试打印回属性的内容时,它似乎被破坏了。 在定义了整个核心数据堆栈的 AppDelegate 中,我写道:

MyObject *newObject = [NSEntityDescription insertNewObjectForEntityForName:@"MyObject"                                                
                               inManagedObjectContext:self.managedObjectContext];

newObject.name = @"Testing";
NSLog([NSString stringWithFormat:@"Name: %s\n", newObject.name]);

我在输出控制台中得到的是

2009-08-24 20:03:55.176 MyApp[15727:20b] Name: ‡}00»

我不明白我是做错了什么还是忘记了什么。有人可以帮忙吗?

【问题讨论】:

    标签: iphone cocoa cocoa-touch core-data nsstring


    【解决方案1】:

    您需要在stringWithFormat: 中使用%@ 格式说明符,因为NSString 是一个Objective-C 对象:

    NSLog([NSString stringWithFormat:@"Name: %@\n", newObject.name]);
    

    %s 用于 C 字符串 (char*s)。更多信息请查看String Format Specifiers

    【讨论】:

      【解决方案2】:

      Objective-C 对象的正确格式说明符是%@,而不是%s

      【讨论】:

        【解决方案3】:

        您应该使用 %@,而不是 %s。 %s 用于 char* 字符串。你传入了一个objective-c对象。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多