Не могу сохранить, чтобы сохранить - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть свой собственный объектный класс, унаследованный от NSObject

@interface BlockedCell : NSObject 
{
    NSValue *gridValue;
    NSString *name;
}

@property (nonatomic, retain) NSValue *gridValue;
@property (nonatomic, retain) NSString *name;

@end

Поэтому я пытаюсь создать несколько объектов:

NSMutableDictionary *dict = [[dict alloc] init];
for (int i = 0; i < 5; ++i)
{
    BlockedCell *block = [[BlockedCell alloc] init];
    block.gridValue = [NSValue valueWithCGPoint: CGPointMake(0.0f, 0.0f)];
    block.name = @"something";
    [dict setObject: block forKey: [NSString stringWithFormat: @"item_%d", i]];
    [block release];
}

if([dict writeToFile: path atomic: YES])
   NSLog(@"Saved");
else
   NSLog(@"Failed to save");

[dict release];

И что я получаю для вывода: «Ошибка»сохранить ".. Если мой словарь не содержит никаких данных, то он выведет" Сохранено "

РЕДАКТИРОВАТЬ: После того, как я провел дополнительное тестирование, я обнаружил, что на самом деле NSValue вызывает сбой сохранения.Так что мне делать, если я хочу сохранить CGPoint в plist?

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

Как вы обнаружили, списки свойств не могут хранить NSValue объекты напрямую. Поддерживаемые классы: NSData, NSString, NSArray, NSDictionary, NSDate и NSNumber, как описано в Справочнике по классам NSPropertyListSerialization .

Самый простой обходной путь - использовать NSString вместо NSValue:

block.gridString = NSStringFromCGPoint(CGPointZero);

CGPoint point = CGPointFromString(block.gridString);
1 голос
/ 14 декабря 2011

вы не можете сохранить NSValue напрямую. В вашем случае вам нужно сохранить точку в виде строкового использования ниже линии

CGPoint point = CGPointMake (10.0,20.0) // вам нужно перевести точку всовместимый объект "Plist", такой как NSString // к счастью, для этого есть метод

[rectArray addObject: NSStringFromPoint (point)];

// сохранить в plist .....

при извлечении этого значения

CGPoint Point = CGPointFromString ([rectArray objectAtIndex: 0]);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...