2014-09-04 39 views
1

所以我有一個名爲model的自定義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 2014-09-05 00:19:15

+0

謝謝。好主意 – Chris 2014-09-05 00:49:27

回答

0

我的假設:

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

這裏最喜歡的UR用相同的密鑰和每一個老心儀的對象由新寵對象替換所以最後一個將是唯一的一次歸檔心儀的對象每次都是一個單獨的對象一個最喜歡的對象存檔。

所以,而不是發送單個收藏對象上述方法發送數組,其中包含所有最喜愛的對象和存檔它。

+0

謝謝你的迴應。我通過使用調用存檔方法的按鈕來計算歸檔部分,然後將數組保存到nsuserdefaults。我留下來的是一個包含多個未歸檔對象的數組,我可以通過NSLog看到。 – Chris 2014-09-05 00:05:58

+0

好吧..繼續.. – user716937 2014-09-05 00:07:24