2009-08-24 110 views
0

我正在移动我在核心数据领域的初始步骤(我也是iPhone开发人员的新手),我发现了一个我无法解释的行为。 我宣布一个NSManagedObject的子类,并定义了一些属性,其中一些类型的NSString *的,MyObject.h是一样的东西:访问核心数据实体的NSString属性

@interface MyObject : NSManagedObject { 

} 

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

@end 

现在,如果我尝试创建一个对象实例,并分配一个值在名称属性中,当我尝试打印属性的内容时,它看起来已经损坏。 在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» 

如果我做的事情我无法理解错误的或者我忘记了什么。任何人都可以提供帮助吗?

回答

7

您需要使用%@格式说明在stringWithFormat:,由于NSString是一个Objective-C的对象:

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

%s用于C-字符串(char*多个)。欲了解更多信息,请看String Format Specifiers

+0

谢谢,我知道它应该是一件愚蠢的事情... – Eugenio 2009-08-24 18:58:52

1

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

+0

感谢您的帮助 – Eugenio 2009-08-24 18:59:45

0

您应该使用%@,而不是%s。 %s用于char *字符串。你正在传递一个Objective-C对象。

+0

感谢您的帮助 – Eugenio 2009-08-24 19:00:21

相关问题