Итак, у меня есть пользовательский класс 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];
, поэтому каждый объект будет разрхивирован. Любая помощь будет оценена!
Это очень неэффективно для разборки каждый раз в 'cellForRowAtIndexPath' - вы должны разблокировать метод, подобный' viewDidLoad'. Затем вы можете установить точку останова и проверить данные в массиве – Paulw11
Спасибо. Хорошая идея – Chris