【问题标题】:Objective C unarchive array of custom nsobjects自定义 nsobjects 的 Objective C 非归档数组
【发布时间】:2014-09-04 23:55:59
【问题描述】:

所以我有一个名为 model 的自定义 NSObject 类。我的问题是我有一个已经存档的自定义模型对象数组,因此它们可以在我的数组和 nsuserdefaults 中使用。我被困在如何取消归档它们。我的归档方法有效,因为我有一个单独的方法调用归档方法并将结果保存到 nsuserdefaults 中的数组中。我有一种方法可以很好地取消归档单个模型对象,但我需要知道如何取消归档数组中的每个归档对象。

存档方法:

   - (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;
}

我的表格视图显示正确的行数,因为我可以获得准确的计数,但单元格只是重复第一个对象。一种可能的解决方案是某种方法,例如[FavoriteCar readFavoriteObjectWithKey:kNSUERDEFAULTSCAR];,因此每个对象都将被取消归档。任何帮助将不胜感激!

【问题讨论】:

  • cellForRowAtIndexPath 中每次都取消归档是非常低效的 - 您应该使用viewDidLoad 之类的方法取消归档。然后可以设置断点并检查数组中的数据

标签: ios objective-c arrays xcode nsobject


【解决方案1】:

我的假设:

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

这里最喜欢的是一个单一的对象,每次你用相同的键归档最喜欢的对象,每次旧的最喜欢的对象被新的最喜欢的对象替换,所以最后一个将是唯一一个存档的最喜欢的对象。

所以不要将单个收藏对象发送到上述方法,而是发送包含所有收藏对象并将其存档的数组。

【讨论】:

  • 感谢您的回复。我已经通过使用调用归档方法的按钮找出归档部分,然后将数组保存到 nsuserdefaults。我剩下的是一个包含多个未归档对象的数组,我可以通过 NSLog 看到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 2015-05-17
  • 1970-01-01
相关资源
最近更新 更多