Ich habe zwei zusätzliche Spalten auf meinem PFUser "Vorname" und "Nachname". Sie werden ordnungsgemäß gespeichert; Ich kann die Daten im Datenbrowser sehen.
Ich habe ein weiteres PFObject "Klasse", das eine Eigenschaft mit einem NSArray von PFUsers hat. Ich verwende die Klassenmethode +fetchAllIfNeededInBackground:block: auf PFObject, um das Array von PFUsers abzurufen. Im Callback-Block rufe ich objectForKey: für jeden der PFUsers im Array auf, aber ich greife über das zugehörige PFObject darauf zu.
// invited ist das NSArray der PFUsers
self.whoCell.mainLabel.text = [[self.plan.invited objectAtIndex:0]
objectForKey:@"firstName"];
Der Debugger gibt dies bei einem Haltepunkt direkt vor dem objectForKey-Aufruf aus:
(lldb) po self.plan.invited
(NSArray *) $4 = 0x06e62a60 <__NSArrayM 0x6e62a60>(
{
firstName = Fake;
lastName = Account;
username = yyajnbafv53qw4yhjm9sfoiis;
}
)
Bearbeiten: Implementierung von self.plan.invited hinzufügen, weil das oben irreführend ist.
- (NSArray*)invited
{
// self.dataSource ist ein PFObject*
return [self.dataSource objectForKey:INVITED_PROP];
}
Aber wenn der obige Aufruf von objectForKey: gemacht wird, wird diese Ausnahme ausgelöst:
'NSInternalInconsistencyException', reason: 'Der Schlüssel "firstName" enthält keine Daten. Rufen Sie fetchIfNeeded auf, bevor Sie seinen Wert abrufen.'
Bearbeiten: Der Zugriff auf das Array der fetchedObjects, das an den Block-Callback für +fetchAllIfNeededInBackground übergeben wird, löst keine Ausnahme aus, aber der Zugriff auf das tatsächliche Array, das ursprünglich an +fetchAllIfNeededInBackground übergeben wurde, wirft eine Ausnahme.
Das Aufrufen von fetchIfNeeded vor dem Aufruf löst das Problem, aber warum? Die Daten sind bereits vorhanden. Verstehe ich +fetchAllIfNeededInBackground falsch, dass es das PFObject, das die Sammlung von PFUsers besitzt, NICHT aktualisiert?