2 Stimmen

Wie kann ein gespeicherter Verweis auf eine NSManagedObject-Unterklasse abgerufen werden?

Ich habe eine NSManagedObject-Unterklasse namens Tour. Den Verweis darauf habe ich mit diesem Code gespeichert:

    prefs = [NSUserDefaults standardUserDefaults];
NSURL *myURL = [[myTour objectID] URIRepresentation];
 NSData *uriData = [NSKeyedArchiver archivedDataWithRootObject:myURL];
 [prefs setObject:uriData forKey:@"tour"];

Jetzt möchte ich es abrufen. Ich habe es mit versucht:

NSData *myData = [prefs objectForKey:@"tour"];
  NSURL *myURL = [NSKeyedUnarchiver unarchiveObjectWithData:myData];

  TourAppDelegate *appDelegate = (TourAppDelegate *)[[UIApplication sharedApplication] delegate];

  NSManagedObjectID *myID = [appDelegate.persistentStoreCoordinator managedObjectIDForURIRepresentation:myURL];

  if (myID)
  {
  Tour *tempObject = [appDelegate.managedObjectContext objectWithID:myID]; //WARNING
  tour = tempObject;
  }

  if (tour) //instruction...

Aber es gibt mir diese Warnung "I

Außerdem bekomme ich bei der Ausführung die folgende Meldung: Beendigung der Anwendung aufgrund der nicht abgefangenen Ausnahme 'NSObjectInaccessibleException', Grund: 'CoreData konnte einen Fehler für '0x5001eb0' nicht erfüllen

Wie kann ich das Problem lösen?

3voto

unixo Punkte 538

Was die Warnung betrifft, haben Sie versucht, die Typisierung zu erzwingen?

Tour *tempObject = (Tour *) [appDelegate.managedObjectContext objectWithID:myID];

Das Problem im Zusammenhang mit NSObjectInaccessibleException ist in dem Link St3fan gepostet gelöst :)

PS: Denken Sie daran, dass eine Unterklasse von nsmanagedobject immer noch ein nsmanagedobject ist!

1voto

Stefan Arentz Punkte 32936

Dies ist ein hervorragender Artikel über das Speichern und Abrufen von Verweisen auf Objekte.

http://cocoawithlove.com/2008/08/safely-fetching-nsmanagedobject-by-uri.html

0voto

bshirley Punkte 8016

Es sieht so aus, als ob der URI, den Sie haben, nicht im Kontext registriert ist.

Aus den Unterlagen:

Wenn das Objekt nicht im Kontext registriert ist, kann es abgeholt oder als Fehler zurückgegeben werden. Diese Methode gibt immer ein Objekt zurück. Es wird davon ausgegangen, dass die Daten in dem durch objectID dargestellten persistenten Speicher vorhanden sind. Ist dies nicht der Fall, löst das zurückgegebene Objekt eine Ausnahme aus, wenn Sie auf eine Eigenschaft zugreifen (d. h. wenn der Fehler ausgelöst wird). Der Vorteil dieses Verhaltens besteht darin, dass Sie Fehler erstellen und verwenden und die zugrunde liegenden Zeilen später oder in einem separaten Kontext erstellen können.

objectRegisteredForID: wird zurückgegeben nil wenn Sie in diesem Fall einen ordnungsgemäßen Fehler beheben wollen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X