2014-09-04 2 views
1

Итак, у меня есть пользовательский класс NSObject, называемый моделью. Моя проблема в том, что у меня есть массив этих пользовательских объектов модели, которые уже были заархивированы, чтобы их можно было использовать в моих массивах и nsuserdefaults. Я зациклился на том, как их разблокировать. Мой метод архивирования работает, поскольку у меня есть отдельный метод, который вызывает метод архивации и сохраняет результаты в массиве в nsuserdefaults. У меня есть метод, который отлично работает, чтобы разобрать отдельные объекты модели, но мне нужно знать, как разблокировать каждый архивный объект в массиве. МетодObjective C unarchive массив пользовательских nsobjects

Архив:

- (void)writeFavoriteObject:(Model *)favorite 
{ 
    NSData *favoriteObject = [NSKeyedArchiver archivedDataWithRootObject:favorite]; 
    [[NSUserDefaults standardUserDefaults] setObject:favoriteObject forKey:kNSUSERDEFAULTSCAR]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

Разархивировать метод:

- (Model *)readFavoriteObjectWithKey:(NSString *)key 
{ 
    NSData *favoriteobject = [[NSUserDefaults standardUserDefaults]objectForKey:key]; 
    Model *favorite = [NSKeyedUnarchiver unarchiveObjectWithData:favoriteobject]; 
    return favorite; 
} 

Моя попытка разархивировать и использовать мой массив:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath 
{ 
    static NSString *CellIdentifier = @"NewsCell"; 
    CarViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    defaultsarray = [[NSMutableArray alloc]init]; 
    defaultsarray = [defaults objectForKey:@"favoritesarray"]; 

    FavoriteCar = [defaultsarray objectAtIndex:indexPath.row]; 

    FavoriteCar = [self readFavoriteObjectWithKey:kNSUSERDEFAULTSCAR]; 



    cell.CarName.text = FavoriteCar.CarModel; 
    cell.CarImage.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:FavoriteCar.CarImageURL relativeToURL:[NSURL URLWithString:@"http://pl0x.net/image.php"]]]]; 

    //Accessory 
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    cell.layer.borderWidth=1.0f; 
    cell.layer.borderColor=[UIColor blackColor].CGColor; 
    cell.CarName.layer.borderWidth=1.0f; 
    cell.CarName.layer.borderColor=[UIColor whiteColor].CGColor; 

    return cell; 
} 

Мой TableView отображает правильное число строк, потому что я может получить точный счет, но ячейка просто повторяет первый объект. Возможным решением может быть какой-то метод вроде [FavoriteCar readFavoriteObjectWithKey:kNSUERDEFAULTSCAR];, поэтому каждый объект будет разрхивирован. Любая помощь будет оценена!

+0

Это очень неэффективно для разборки каждый раз в 'cellForRowAtIndexPath' - вы должны разблокировать метод, подобный' viewDidLoad'. Затем вы можете установить точку останова и проверить данные в массиве – Paulw11

+0

Спасибо. Хорошая идея – Chris

ответ

0

Мои Предположения:

- (void)writeFavoriteObject:(Model *)favorite 
{ 
    NSData *favoriteObject = [NSKeyedArchiver archivedDataWithRootObject:favorite]; 
    [[NSUserDefaults standardUserDefaults] setObject:favoriteObject forKey:kNSUSERDEFAULTSCAR]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

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

Таким образом, вместо отправки одного любимого объекта выше метод посылает массив, который содержит весь любимый объект и архивирует его.

+0

Спасибо за ваш ответ. Я вычислил часть архивирования с помощью кнопки, которая вызывает метод архива, а затем сохраняет массив в nsuserdefaults. Я остался с массивом с несколькими unarchived объектами, как я могу видеть через NSLog. – Chris

+0

Хорошо .. продолжайте .. – user716937

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