2013-09-01 37 views
2

我已經成功地將地址簿數據存儲在覈心數據中,但我無法檢索它並將其顯示在tableView中。我缺少什麼?如何從核心數據中提取數據並在表格中顯示查看iOS 6

這是我如何從核心數據中獲取數據。

-(void)fetchFromDatabase 
{ 
    AddressBookAppDelegate *appDelegate =[[UIApplication sharedApplication]delegate]; 
    NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
    NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"AddressBook" inManagedObjectContext:context]; 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:entityDesc]; 

    NSError *error; 
    self.arrayForTable = [context executeFetchRequest:request error:&error]; 
    NSLog(@"fetched data = %@",[self.arrayForTable lastObject]); //this shows the data 
    [self.tableView reloadData]; 

這是我的表視圖配置。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [self.arrayForTable count]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
    reuseIdentifier:CellIdentifier]; 

    if ([self.arrayForTable count]>0) 
    { 
     NSLog(@" table view content = %@",[self.arrayForTable lastObject]);// this doesn't log 
     AddressBook *info = [self.arrayForTable objectAtIndex:indexPath.row]; 
     cell.textLabel.text = info.firstName; 

    } 
    } 
    return cell; 
} 
+0

嘗試在''fetchFromDatabase'方法的末尾添加'[self.tableView reloadData]'。 - 您還應該考慮使用NSFetchedResultsController在表格視圖中顯示Core Data對象。 –

+0

我更新了[self.tableView reloadData];方法 。但結果是一樣的。 – icodes

+0

是否調用了'numberOfRowsInSection'和'cellForRowAtIndexPath'? –

回答

0

正如在討論翻出來,self.arrayForTableviewWillAppear替換爲空數組fetchFromDatabase獲取的對象之後。

另一個問題是,程序的每次運行都會在數據庫中創建新對象,導致重複的對象爲 。您可以

  • 插入新的對象,或
  • 爲每名前刪除所有對象,檢查是否有匹配對象在數據庫中已存在,並插入僅在需要一個新的。

在「核心數據編程指南」中的"Implementing Find-or-Create Efficiently"中描述了更高級的技術。

相關問題