访问核心数据实体的 NSString 属性
Posted
技术标签:
【中文标题】访问核心数据实体的 NSString 属性【英文标题】:Accessing NSString properties of a Core Data entity 【发布时间】: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»
我不明白我是做错了什么还是忘记了什么。有人可以帮忙吗?
【问题讨论】:
【参考方案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对象。
【讨论】:
以上是关于访问核心数据实体的 NSString 属性的主要内容,如果未能解决你的问题,请参考以下文章
在 CoreData 实体中将属性从 NSNumber 转换为 NSString - LightWeightMigration