Доступ к свойствам NSString объекта Core Data - PullRequest
0 голосов
/ 24 августа 2009

Я перемещаю свои начальные шаги в область Core Data (и я также довольно новичок в разработке для 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»

Я не могу понять, делаю ли я что-то неправильно или я что-то забыл. Кто-нибудь может помочь, пожалуйста?

Ответы [ 3 ]

7 голосов
/ 24 августа 2009

Вам необходимо использовать спецификатор формата %@ в stringWithFormat:, поскольку NSString является объектом Objective-C:

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

%s используется для C-струн (char* с). Для получения дополнительной информации смотрите Спецификаторы формата строки .

1 голос
/ 24 августа 2009

Правильный спецификатор формата для объектов Objective C: %@, а не %s.

0 голосов
/ 24 августа 2009

Вы должны использовать% @, а не% s. % s для строк char *. Вы передаете объект-c.

...