0

我試圖使用PList來填充從視圖控制器推送的視圖控制器,該視圖控制器從表視圖中推送。更簡單地說:在表視圖控制器(didSelectRowAtIndexPath)中設置整數值用於PList(iOS)

TableViewController - > DetailViewController - > 2ndDetailViewController(< - 這一個是我填充一個)

我試圖做到這一點的方法是用一個整數設置爲值當用戶點擊表格視圖中的行時。然後,我將使用該整數的值指向PList中的正確值並拉出相應的字符串。在第二個視圖控制器中,我試圖用PList中的圖像填充UIImageView。這裏是我的didSelectRowAtIndexPath方法的代碼:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    DealsDetailViewController *dealsDetail = [[DealsDetailViewController alloc]initWithNibName:@"DealsDetailViewController" bundle:nil]; 
    dealsDetail.dealsImageString = [[self.dealsArray objectAtIndex:indexPath.row] objectForKey:@"Image"]; 
    dealsDetail.dealsLabelString = [[self.dealsArray objectAtIndex:indexPath.row] objectForKey:@"Description"]; 
    dealsDetail.title = [[self.dealsArray objectAtIndex:indexPath.row] objectForKey:@"Name"];  

if ([[dealsArray objectAtIndex:indexPath.row] isEqual:@"Deal #1"]) { 
    dealsDetail.dealsInt = 0; 
    [dealsDetail setTitle:[dealsArray objectAtIndex:indexPath.row]]; 
} 

if ([[dealsArray objectAtIndex:indexPath.row] isEqual:@"Deal #2"]) { 
    dealsDetail.dealsInt = 1; 
    [dealsDetail setTitle:[dealsArray objectAtIndex:indexPath.row]]; 
} 

if ([[dealsArray objectAtIndex:indexPath.row] isEqual:@"Deal #3"]) { 
    dealsDetail.dealsInt = 2; 
    [dealsDetail setTitle:[dealsArray objectAtIndex:indexPath.row]]; 
} 

[self.navigationController pushViewController:dealsDetail animated:YES]; 
[dealsDetail release]; 

一切都被正確填充。我試圖在表視圖控制器(點擊按鈕)和DealsDetailViewController的viewDidLoad方法中NSLog的dealsDetail.dealsInt的值。兩次,無論我點擊哪一行,它都會返回值「0」。我的語法在哪裏出錯了?

編輯-------- 這裏的時候我退出我得到什麼:

NSLog(@"%@",[dealsArray objectAtIndex:indexPath.row]); 


2011-11-28 17:40:59.092 Stores Tab Bar[7386:207] { 
    Barcode = "SampleBarCode3.png"; 
    Description = "Here's the deal 3"; 
    Image = "FritoTest.png"; 
    Name = "Deal #3"; 
    Thumbnail = "dollars.png"; 
} 

它記錄的是被點擊正確的對象的plist內容。因此它抓住了正確的信息(我認爲這是因爲它是正確填充表視圖和詳細信息視圖...)

+0

此代碼看起來不錯。請在DealsDetailViewController中包含屬性的聲明以及選擇圖片時使用此值的代碼 - 聽起來您的字符串格式可能有錯誤,因此記錄/文件名無法正常工作 – jrturton

+0

我實際上沒有編寫代碼還沒有在第二個DealsDetailViewController中設置圖像,因爲它出現整數沒有保留值(我想確保這是第一次工作)。無論我按下哪個按鈕,會不會有一個原因爲什麼總是記錄「0」? – MillerMedia

+0

您在使用DetailViewConroller或SecondDetailViewController或兩者時遇到問題嗎?你的問題從第二個開始,然後似乎轉向第一個? –

回答

2
if ([[dealsArray objectAtIndex:indexPath.row] isEqual:@"Deal #1"]) { 
    dealsDetail.dealsInt = 0; 
    [dealsDetail setTitle:[dealsArray objectAtIndex:indexPath.row]]; 
} 

這似乎內dealsArray頂撞你剛纔使用的對象。它看起來像上面的行字典:

dealsDetail.dealsImageString = [[self.dealsArray objectAtIndex:indexPath.row] objectForKey:@"Image"]; 

然而,在這裏你是比較它與靜態字符串。正在發生的事情是,如果條件等都保持爲零,那麼它與這些中的任何一個都不匹配。

你想以下幾點:

if ([[[dealsArray objectAtIndex:indexPath.row] objectForKey:@"Name"] isEqualToString:@"Deal #1"]) { 

注意我正在另一個objectForKey(鍵值爲@「名稱」按你上面編輯)從字典,而我也使用isEqualToString:這是正確的方式比較字符串。

+0

好的,是的,我明白你在說什麼。我一直在努力抓住編碼差異時使用Plist與數組而不是字典等我已經嘗試了你所放(這對我來說是完全意義上的),但它仍然返回'0'。我的PList的代碼片段會有幫助嗎? – MillerMedia

+0

更有用的是NSLog(@「%@」,[dealsArray objectAtIndex:indexPath.row]); – jrturton

+0

我剛剛添加了一個上面的編輯,它註銷了第三行按下的正確信息(另外兩行也一樣)。它抓取信息並瞭解哪些行正在按下,但不會更改整數值... – MillerMedia

相關問題