访问核心数据实体的 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

核心数据和 NSSortDescriptor 未根据基于 NSString 的第三个描述符排序

访问托管对象的 NSString 属性

核心数据 - 如何访问实体属性?

核心数据:根据实体类型对抽象实体的结果进行排序

自定义验证期间神奇记录核心数据中的上下文保存问题