2012-10-22 2 views
0

У меня есть NSMutableArray feed.leagues, у которого есть два объекта: <MLBLeagueStandings: 0xeb2e4b0> Я хочу записать его в файл, а затем прочитать его из файла. Это то, что я сделал:Написание NSMutableArrray для файла, а затем его чтение

- (void)encodeWithCoder:(NSCoder *)encoder { 
    [encoder encodeObject:feed.leagues forKey:@"feed.leagues"]; 
} 

- (id)initWithCoder:(NSCoder *)decoder { 
    if (self = [super init]) { 
     self.feed.leagues = [decoder decodeObjectForKey:@"feed.leagues"]; 
    } 
    return self; 
} 

-(void)saveJSONToCache:(NSMutableArray*)leaguesArray { 
    NSString *cachePath = [self cacheJSONPath]; 

    [NSKeyedArchiver archiveRootObject:feed.leagues toFile:cachePath]; 
    NSMutableArray *aArray = [NSKeyedUnarchiver unarchiveObjectWithFile:cachePath]; 
    NSLog(@"aArray is %@", aArray); 
} 

-(NSString*)cacheJSONPath 
{ 

    NSString *documentsDirStandings = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *cacheJSONPath = [NSString stringWithFormat:@"%@/%@_Standings.plist",documentsDirStandings, sport.acronym]; 
return cacheJSONPath; 
} 
+0

Пожалуйста, сформулируйте какие проблемы вы сталкиваетесь ?? И конкретно, что именно вы хотите сделать. – Krunal

+0

Я получаю эту ошибку 2012-10-22 11: 44: 13.361 FOX Sports [60958: 16d03] - [MLBLeagueStandings encodeWithCoder:]: непризнанный селектор отправлен в пример 0xee3d6c0 2012-10-22 11: 44: 13.362 FOX Sports [60958] : 16d03] *** Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '- [MLBLeagueStandings encodeWithCoder:]: непризнанный селектор, отправленный экземпляру 0xee3d6c0' *** Первый стек вызовов броска: по строке [NSKeyedArchiver archiveRootObject: feed. лиги toFile: cachePath] – Manpreet

+0

@Goti: Я хочу сохранить массив feed.leagues в файл, а затем читать его оттуда в будущем. Массив содержит два объекта класса MLBLeagueStandings. – Manpreet

ответ

1

Ваш объект: MLBLeagueStandings должен быть сериализации и реагировать на NSCoding ПРОТОКОЛ:

@interface MLBLeagueStandings : NSObject <NSCoding>{ 

} 

Теперь в ваших MLBLeagueStandings файл класса (.m) добавить следующие методы:

Фактически, если вы хотите записать объект в файл (в вашем случае это массив), весь объект, содержащийся в этом массиве, должен соответствовать протоколу NSCoding.

Кроме того, если вы хотите пример: here is a good tutorial

Надеется, что это поможет.

NB: если вы хотите, чтобы кодировать/декодировать примитивный тип (INT, поплавок и т.д ...) использовать:

[encode encodeInt:intValue forKey:@"KEY"]; 

(more information on apple doc)

+0

Как добавить объект в encodeObject или decodeObjectforKey, если его int или float. – Manpreet

+0

Вы можете использовать [encoder encodeInt: intValue forKey: @ "MY_INT_KEY"]; Дополнительная информация о документации на яблоко: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSCoder_Class/Reference/NSCoder.html – Ashbay

Смежные вопросы