2012-01-14 4 views
2

Я читал так много тем здесь об этом, но я бы не смог его найти.данные не будут удалены в uitableview после обновления приложения

Я хочу иметь UITableView, где я могу поместить некоторые словари и внутри них, иметь слова с некоторыми полями (около 4). Пока все в порядке, но мой вопрос - это лучший способ не стереть данные после обновления приложения до новой версии. Я имею в виду, что когда пользователь обновляет приложение, все эти слова/словари не будут удалены из-за обновления.

Я не знаю, должен ли я использовать NSMutableArray класса слов (например) или использовать Core Data или SQLite.

Любая помощь будет очень признательна. Спасибо заранее.

+0

Удаляет ли NSUserDefaults при обновлении? –

ответ

1

Если у вас есть словари, которые на самом деле NSDictionaries, сериализации их использование Протокол NSCoding для файла внутри документов является простым, быстрым и надежным. Содержимое каталога Documents остается неизменным, если вы обновляете приложение.

Это код, который я использую в одном из моих приложений (он сохраняет список цитат, которые были Избраным пользователем)

- (BOOL) saveQuotesToDisk 
{ 
    //get path to events list  
    NSArray * dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString * fullpath = [NSString stringWithFormat:@"%@/%@", [dirPaths objectAtIndex:0], @"FavQuoteList.plist"]; 

    //create data to be saved 
    NSMutableDictionary * rootObject = [NSMutableDictionary dictionary]; 
    [rootObject setValue: _SavedQuotes forKey:@"_SavedQuotes"]; 

    //write data 
    bool success = [NSKeyedArchiver archiveRootObject: rootObject 
               toFile: fullpath]; 

    if (success) NSLog(@"Quotes list saved."); 
    else NSLog(@"ERROR on saving quotes list!"); 

    return success; 
} 

- (BOOL) readFavoriteQuotesFromDisk 
{ 
    //get path to quote list  
    NSArray * dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString * fullpath = [NSString stringWithFormat:@"%@/%@", [dirPaths objectAtIndex:0], @"FavQuoteList.plist"]; 

    //read data 
    NSDictionary * rootObject = [NSKeyedUnarchiver unarchiveObjectWithFile: fullpath ]; 
    _SavedQuotes = [[rootObject valueForKey:@"_SavedQuotes"] retain]; 

    //check data 
    if (_SavedQuotes == nil) return NO; 
    else return YES; 
} 

Вы можете добавить несколько объектов в rootObject тех пор, пока они соответствуют к протоколу NSCoding.

+0

Большое спасибо. Я предполагаю, что _SavedQuotes - это NSMutableArray, не так ли? Могу ли я добавить больше объектов в rootObject, вызванный для exmaple «_Words» с новым ключом? Я бы хотел, чтобы после всех этих слов был вариант поиска, где я мог найти все, что захочу, в этих словарях. –

+0

Да _SavedQuotes - это NSMutableArray объектов типа Quote. Вы можете добавлять дополнительные объекты в rootObject - все, что соответствует NSCoding, поэтому массивы, словари, наборы, все, что вам нравится. –

+0

Привет и спасибо! NSMutableArray не компилируется с NSCoding, а просто NSArray. Что мне делать? Может быть, я делаю что-то неправильно, и это то, что он дает мне ошибку –

0

Ну я думаю, что вы можете хранить эти данные в NSUserDefaults или в документах каталог .. Документы содержания справочника не удаляется при обновлении ..

+0

Спасибо! Я тоже попробую. Я не привык координировать с NSUserDefaults, но я попробую его –

+0

, если вы считаете, что какой-либо ответ помог вам тогда, пожалуйста, поддержите и примите этот ответ. – Saurabh

+0

Я еще не могу выдвинуть свою кандидатуру, мне нужно как минимум 15 репутации. Благодаря! –

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