1

我無法從我的數據庫中讀取我的數據。我有一個tabbarcontroller的應用程序。 在第一個選項卡中,iphone相機從條形碼中獲取圖片並將結果發送到另一個視圖(CameraReturnDetailViewController)。 在CameraReturnDetailViewController是savebutton,這裏是從這個保存按鈕的代碼:TableView不顯示任何數據(CoreData) - 應用程序崩潰

- (IBAction)saveAndQuitScan:(id) sender { 
    XLog(@"saveAndQuitScan button wurde geklickt!"); 

    ProjectQRCodeAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate]; 
    NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
    NSManagedObject *newData; 

    newData = [NSEntityDescription insertNewObjectForEntityForName:@"BarcodeDaten"  inManagedObjectContext:context]; 

    [newData setValue:dataLabel.text forKey:@"Barcode_CD"]; 

    NSError *error; 
    [context save:&error]; 

    //Aktuelle ansicht (self) animiert verlassen 
    [self dismissModalViewControllerAnimated:YES]; 

    // Nachdem die ansicht verlassen wurde, 
    // auf das zweite Tab wechseln(scanverlauf) 
    /** TO DO - Funktioniert noch nicht **/ 
    [self.tabBarController setSelectedIndex:1]; 
} 

現在,我的目的是要表明塔巴在第二個選項卡,在一個TableView中(ScansViewController):

- (void)viewDidLoad { 
[super viewDidLoad]; 

if (managedObjectContext_ == nil) 
    { 
managedObjectContext_ = [(ProjectQRCodeAppDelegate *)[[UIApplication sharedApplication]delegate] managedObjectContext]; 
NSLog(@"After managedObjectContext: %@", managedObjectContext_); 
} 

myTableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame] style:UITableViewStylePlain]; 
myTableView.delegate = self; 
myTableView.dataSource = self; 

myTableView.autoresizesSubviews = YES; 

    self.navigationItem.title = @"Code Liste"; 

    self.view = myTableView;  

} 


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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView  dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
} 

return cell; 

} 

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


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

    NSString *selectDay = [NSString stringWithFormat:@"%d", indexPath.row]; 

    TableDetailViewController *fvController = [[TableDetailViewController alloc] initWithNibName:@"TableDetailViewController" bundle:[NSBundle mainBundle]]; 
    fvController.selectDay = selectDay; 
    [self.navigationController pushViewController:fvController animated:YES]; 
    [fvController release]; 
    fvController = nil; 

} 

- (void) configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { 

    NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    cell.textLabel.text = [[managedObject valueForKey:@"Barcode_CD"] description]; 
} 

- (NSFetchedResultsController *) fetchedResultsController { 


    if (fetchedResultsController_ !=nil) { 
     return fetchedResultsController_; 
    } 


    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"BarcodeDaten"  inManagedObjectContext:self.managedObjectContext]; 

    [fetchRequest setEntity:entity]; 
    [fetchRequest setFetchBatchSize:20]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Barcode_CD"  ascending:NO]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

    [fetchRequest setSortDescriptors:sortDescriptors]; 

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc]  initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext  sectionNameKeyPath:nil cacheName:@"Root"]; 
    aFetchedResultsController.delegate = self; 
    self.fetchedResultsController = aFetchedResultsController; 

    [aFetchedResultsController release]; 
    [fetchRequest release]; 
    [sortDescriptor release]; 
    [sortDescriptors release]; 

NSError *error = nil; 
    if (![fetchedResultsController_ performFetch:&error]) { 
     XLog(@"Error: %@, %@", error, [error userInfo]); 
     abort(); 
    } 

return fetchedResultsController_; 
} 

起初,我得到這個錯誤,當我選用第二個選項卡(ScansViewController): 「 終止應用程序由於未捕獲的異常‘NSInternalInconsistencyException’,原因是:‘+ entityForName:未能找到NSManagedObjectModel的實體名稱」BarcodeDaten’ 「

名稱是正確的,但我不明白我的錯誤。

沒有數據顯示在Tableview中,爲什麼?

我錯過了什麼..?或者有什麼不對?

感謝您的幫助, brush51

回答

3

這是解決方案:

if (managedObjectContext == nil) 
{ 
     managedObjectContext = [(CoreDataBooksAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
     NSLog(@"After managedObjectContext: %@", managedObjectContext); 
} 

這個代碼是從這裏:Core-Data iPhone: could not locate an NSManagedObjectModel