2011-04-07 33 views
1

hi 我試圖在nsuserdefaults.Some中保存被勾選的行的狀態。我如何得到錯誤 :setObject未聲明。在nsuserdefaults中保存複選標記附件值,然後將其復原

我的代碼是:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath]; 

    NSInteger newRow = [indexPath row]; 
    NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1; 

    if(newRow != oldRow) 
    { 
     newCell.accessoryType = UITableViewCellAccessoryCheckmark; 
     UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:lastIndexPath]; 
     oldCell.accessoryType = UITableViewCellAccessoryNone; 
     lastIndexPath = indexPath; 
    } 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    prefs = [setObject:lastIndexPath forKey:@"lastIndexPath"]; 

} 

還我試圖獲取在viewDidLoad方法行狀態。我的代碼是(我應該在這裏取鑑於沒有負載):

- (void)viewDidLoad { 
menuList=[[NSMutableArray alloc] initWithObjects: 
      [NSArray arrayWithObjects:@"LOCATION1",nil], 
      [NSArray arrayWithObjects:@"LOCATION2",nil], 
      [NSArray arrayWithObjects:@"LOCATION3",nil], 
      [NSArray arrayWithObjects:@"LOCATION4",nil], 
      [NSArray arrayWithObjects:@"LOCATION5",nil], 
      [NSArray arrayWithObjects:@"LOCATION6",nil], 
      [NSArray arrayWithObjects:@"LOCATION7",nil], 
      nil]; 

[self.navigationController setNavigationBarHidden:NO]; 
self.navigationController.navigationBar.tintColor=[UIColor blackColor]; 
self.navigationController.navigationBar.barStyle=UIBarStyleBlackTranslucent;  
[email protected]"Location Selection"; 
[table reloadData]; 
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
if([[prefs objectForKey:@"lastIndexPath"] compare: indexPath]== NSOrderedSame){ 
    cell.AccessoryType = UITableViewCellAccessoryCheckMark; 
} 
[super viewDidLoad]; 
} 

並且出現錯誤:indexPath未聲明和未聲明的單元格。

我得到爲什麼這些錯誤即將到來他們兩個(索引路徑和單元格)不在範圍內,然後放置此代碼的位置(nsuserdefaults數據重試代碼)。請指導我的。 謝謝!

+1

你有一個'UITableViewDelegate'方法,這就是爲什麼indexPath和細胞是不確定的外部代碼。 – Joe 2011-04-07 13:47:08

回答

0

嘗試更換此:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
prefs = [setObject:lastIndexPath forKey:@"lastIndexPath"]; 

有了這個:

[[NSUserDefaults standardUserDefaults] setObject:lastIndexPath forKey:@"lastIndexPath"]; 

你的錯誤是因爲你調用的setObject:forKey:不指定您的首選項對象調用它。所以編譯器不會將其識別爲有效的消息。你也試圖將這些消息輸出到你的prefs對象,這是不正確的。

這就是說,我很確定你不能直接在plist中存儲一個NSIndexPath,你必須存儲爲NSNumber,NSString或NSData。

這應該是這樣的:

[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:lastIndexPath.row] forKey:@"lastIndexPath"]; 
+0

謝謝,但如何檢索相同的設置單元格附件類型;) – 2013-05-15 07:10:42

+0

UITableViewCellAccessoryType是一個C枚舉。你可以將它的值包裝在一個NSNumber中。將其存儲在NSUerDefaults中。然後,當你從NSUserDefaults中取出該數字時,將該值轉換爲相關的UITableViewCellAccessoryType枚舉值。 – Sabobin 2013-05-15 10:15:26

+0

是的,我已經嘗試過,但它不工作,這裏是我的執行代碼:http://pastebin.com/MmC6EcYu,請你花一些時間來查看和糾正我的錯誤,請:) :) – 2013-05-15 10:30:12

相關問題