1

データベースからデータを読み取ることができません。タブバーコントローラーを備えたアプリがあります。最初のタブでは、iPhone カメラがバーコードから写真を撮り、結果を別のビュー (CameraReturnDetailViewController) に送信します。CameraReturnDetailViewController には保存ボタンがあり、この保存ボタンのコードは次のとおりです。

- (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) の 2 番目のタブにタバを表示することです。

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

最初に、2 番目のタブ (ScansViewController) を選択したときにこのエラーが発生しました: "キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。

名前は正しいですが、間違いがわかりません。

Tableview にデータが表示されません。なぜですか?

私は何かを逃した..?それとも何か間違っていますか?

助けてくれてありがとう、brush51

4

1 に答える 1

3

これが解決策です:

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

このコードはここからのものです: Core-Data iPhone: could not find an NSManagedObjectModel

于 2011-01-11T08:31:42.637 に答える