2011-10-01 53 views
0

我能夠從plist獲取數據,但似乎我的cellForRowAtIndexPath沒有被調用,因爲沒有NSLog打印方法內的任何內容。iOS - 當有多個鍵時,如何顯示來自plist的數據?

這裏是我的代碼: -

- (void)viewDidLoad 
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drinks" ofType:@"plist"]; 

    NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; 
    self.drinks = [tempDict objectForKey:@"Root"]; 
    NSLog(@"%@", self.drinks); 
    NSLog(@"Number = %d", self.drinks.count);  
    [super viewDidLoad]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"Cell"; 
NSLog(@"I am inside cellForRowAtIndexPath"); 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
} 

// Configure the cell. 
NSArray *allValues = [self.drinks valueForKey:@"name"];  
NSLog(@"%d", allValues.count); 
cell.textLabel.text = [allValues objectAtIndex:indexPath.row]; 

return cell; 

}

這裏是我的控制檯輸出: - 的cellForRowAtIndexPath的的NSLog的

2011-10-01 20:27:01.940 DrinkMixer[1832:b303] (
     { 
     directions = "Shake adahsdk adlkasd"; 
     ingredients = "kslkds lkjsjlkd kjsljlakj aajdlkj"; 
     name = "Fire Cracker"; 
    }, 
     { 
     directions = "abds fedfsdkkjkljlkj;j ok"; 
     ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj"; 
     name = "Lemon Drop"; 
    }, 
     { 
     directions = "abds fedfsdkkjkljlkj;j ok"; 
     ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj"; 
     name = Mojito; 
    }, 
     { 
     directions = "abds fedfsdkkjkljlkj;j ok"; 
     ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj"; 
     name = "After Drink Mint"; 
    }, 
     { 
     directions = "abds fedfsdkkjkljlkj;j ok"; 
     ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj"; 
     name = "Apple Martini"; 
    }, 
     { 
     directions = "abds fedfsdkkjkljlkj;j ok"; 
     ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj"; 
     name = "Shockwave"; 
    }, 
     { 
     directions = "abds fedfsdkkjkljlkj;j ok"; 
     ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj"; 
     name = "Beer"; 
    }, 
     { 
     directions = "abds fedfsdkkjkljlkj;j ok"; 
     ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj"; 
     name = "Last Desire"; 
    }, 
     { 
     directions = "abds fedfsdkkjkljlkj;j ok"; 
     ingredients = "hasdhalsdlash asdhasldh kjdfkjshdj"; 
     name = "Vodka"; 
    } 
) 
2011-10-01 20:27:01.942 DrinkMixer[1832:b303] Number = 9 

沒有被調用。

任何人都可以請告訴這段代碼有什麼問題。

謝謝。

+1

這段代碼沒有錯,所以你的錯誤一定在別的地方。你的tableView方法是否被調用?例如,有多少行被返回? – Jamie

+0

我已經解決了這個問題。我犯了一個非常愚蠢的錯誤。我從方法numberOfRowsInSection返回錯誤的值。感謝您試圖幫助我。對此,我真的非常感激。 – Varundroid

回答

1

您可能沒有在頭文件中實現UITableViewDelegate,或者UITableViewdatasourcedelegate沒有連接到您的nib文件中。我建議查看datasource

UPDATE:

的事實tableView:cellForRowAtIndexPath:沒有被調用,datasource設置正確的話那可能是plist中加載到self.drinksUITableView後已經加載。證明可以上下滾動空的UITableView,看看屏幕外的單元格是否開始出現。你-(void)viewDidLoad

  • 呼叫開始

    1. 電話[super viewDidLoad];用於重載你的UITableView plist中加載後:

      我建議兩兩件事。

    嘗試:

    - (void)viewDidLoad { 
    
        [super viewDidLoad]; 
    
        NSString *path = [[NSBundle mainBundle] pathForResource:@"drinks" ofType:@"plist"]; 
    
        NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; 
        self.drinks = [tempDict objectForKey:@"Root"]; 
        NSLog(@"%@", self.drinks); 
        NSLog(@"Number = %d", self.drinks.count);  
    
        [yourTableView reload]; 
    
    } 
    

    最後,我擔心你datasource的原因是因爲我覺得即使是空的電池應該叫tableView:cellForRowAtIndexPath:

    希望這有助於。

  • +0

    一切都在正確的地方。此代碼之前工作,但我對我的plist做了一些改變,之後它就停止工作,雖然我仍然能夠從plist獲取數據,因爲您可以看到控制檯跟蹤。我不知道我做錯了什麼。 – Varundroid

    +0

    最後我解決了這個問題。多麼愚蠢的錯誤。該死我!我從numberOfRowsInSection返回了一個錯誤的值。感謝您試圖幫助我。對此,我真的非常感激。 – Varundroid

    +0

    很酷。很高興你明白了。 – dredful

    相關問題