2

アドレス帳データを Core Data に正常に保存しましたが、それを取得して tableView に表示することができません。

これは、コアデータからデータを取得する方法です。

-(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;
}
4

1 に答える 1

0

議論で判明したように、は でオブジェクトをフェッチしたself.arrayForTable、 で空の配列に置き換えられました。viewWillAppear fetchFromDatabase

もう 1 つの問題は、プログラムを実行するたびにデータベースに新しいオブジェクトが作成され、オブジェクトが重複することでした。次のいずれかを実行できます

  • 新しいオブジェクトを挿入する前にすべてのオブジェクトを削除する、または
  • 名前ごとに、一致するオブジェクトがデータベースに既に存在するかどうかを確認し、必要な場合にのみ新しいオブジェクトを挿入します。

より高度な手法については、「Core Data Programming Guide」の「Implementing Find-or-Create Efficiently」で説明されています。

于 2013-09-01T12:29:17.790 に答える