Die übergabe eines ManagedObjectContext auf den zweiten Blick

Schreibe ich mein erstes iPhone/Cocoa-app. Es hat zwei Tabellen-Ansichten innerhalb einer Ansicht navigation. Wenn man mit dem Finger eine Zeile in der ersten Tabelle anzeigen, gelangen Sie zu der zweiten Tabelle anzuzeigen. Ich möchte, dass die zweite Anzeige, um die Datensätze aus CoreData-stellen im Zusammenhang mit der Zeile, die Sie berührt in der ersten Ansicht.

Habe ich die CoreData Daten zeigt sich gut in der ersten Tabelle anzeigen. Sie können berühren Sie eine Zeile aus und gehen auf die zweite Tabelle anzeigen. Ich bin in der Lage, übergeben Sie Informationen aus dem ausgewählten Objekt von der ersten zu der zweiten Ansicht. Aber ich Schaffe es nicht, den zweiten Blick zu tun, seine eigenen CoreData Holen. Für das Leben von mir ich kann nicht den managedObjectContext-Objekt übergeben, um die zweite view-controller. Ich will nicht zu tun, die Suchvorgänge in der ersten Ansicht, und übergeben Sie ein Wörterbuch, denn ich möchte in der Lage sein zu verwenden, um ein Suchfeld zur Verfeinerung der Ergebnisse in der zweiten Ansicht, sowie das einfügen neuer Einträge in die CoreData Daten von dort.

Hier ist die Funktion, die übergänge von der ersten zur zweiten Ansicht.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //Navigation logic may go here -- for example, create and push another view controller.
    NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:nil];

    secondViewController.tName = [[selectedObject valueForKey:@"name"] description];
    secondViewController.managedObjectContext = [self managedObjectContext];

    [self.navigationController pushViewController:secondViewController animated:YES];
    [secondViewController release];
}

- Und dies ist die Funktion innerhalb SecondViewController, die Abstürzen:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.title = tName;

    NSError *error;
    if (![[self fetchedResultsController] performFetch:&error]) { //<-- crashes here
        //Handle the error...
    }
}

- (NSFetchedResultsController *)fetchedResultsController {

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

    /*
     Set up the fetched results controller.    
     */
    //Create the fetch request for the entity.
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    //Edit the entity name as appropriate.
        //**** crashes on the next line because managedObjectContext == 0x0
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"SecondEntity" inManagedObjectContext:managedObjectContext]; 
    [fetchRequest setEntity:entity];

    //<snip> ... more code here from Apple template, never gets executed because of the crashing

    return fetchedResultsController;
}

Irgendwelche Ideen auf, was mache ich hier falsch?

managedObjectContext ist eine beibehaltene Eigenschaft.

UPDATE: ich trug ein NSLog([[managedObjectContext registeredObjects] description]); in viewDidLoad und es erscheint managedObjectContext übergeben wird just fine. Immer noch Absturz, obwohl.

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: nicht finden konnte, ein NSManagedObjectModel für Entität name 'SecondEntity"

  • Was passiert, wenn Sie den code initialisiert die gefundenen Ergebnisse-controller in viewDidLoad? Ich habe eine app, die im wesentlichen die gleiche Sache, und es funktioniert gut für mich, aber ich meine die gefundenen Ergebnisse-controller direkt in viewDidLoad mit initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName:.
  • Ich habe gerade versucht, stürzt es in der gleichen Weise. Die seltsame Sache ist, dass wenn ich einen breakpoint setzen, alle member-Variablen der selbst NULL sind, aber der Titel nicht richtig eingestellt, so dass kann nicht wahr sein.
InformationsquelleAutor amo | 2009-07-02
Schreibe einen Kommentar