PFUser「firstName」と「lastName」に2つの追加の列があります。彼らはきちんと節約しています。データブラウザでデータを見ることができます。
PFUsersのNSArrayを持つプロパティを持つ別のPFObject「クラス」があります。PFObjectのクラスメソッド+fetchAllIfNeededInBackground:block:を使用して、PFUsersの配列をフェッチします。コールバックブロックで、配列内の各PFUserでobjectForKey:を呼び出しますが、所有しているPFObjectを介してそれらにアクセスします。
// invited is the NSArray of PFUsers
self.whoCell.mainLabel.text = [[self.plan.invited objectAtIndex:0]
objectForKey:@"firstName"];
デバッガーは、objectForKey呼び出しの直前のブレークポイントでこれを出力します。
(lldb) po self.plan.invited
(NSArray *) $4 = 0x06e62a60 <__NSArrayM 0x6e62a60>(
<PFUser:GCCdPjCU2J> {
firstName = Fake;
lastName = Account;
username = yyajnbafv53qw4yhjm9sfoiis;
}
)
編集:上記は誤解を招くため、self.plan.invitedの実装を追加します。
- (NSArray*)invited
{
// self.dataSource is a PFObject*
return [self.dataSource objectForKey:INVITED_PROP];
}
しかし、上記の呼び出しがobjectForKeyに対して行われると、この例外がスローされます。
'NSInternalInconsistencyException', reason: 'Key "firstName" has no data. Call fetchIfNeeded before getting its value.'
編集:+ fetchAllIfNeededInBackgroundのブロックコールバックに渡されるfetchedObjectsの配列にアクセスしてもスローされませんが、元々+fetchAllIfNeededInBackgroundに渡された実際の配列にアクセスするとスローされます。
呼び出しの前にfetchIfNeededを呼び出すと問題が解決しますが、なぜですか?データはすでにそこにあります。PFUsersのコレクションを所有するPFObjectを更新しないという点で、+ fetchAllIfNeededInBackgroundを理解できませんか?