Ich habe es mit einem Korruptionsproblem in der GKTurnBasedMatch-Klasse von Game Kit zu tun (siehe this thread), die manchmal zu einem ungültigen Spielstatus mit beschädigten MatchData führt.Wie identifiziere ich ein leeres NSData-Objekt, das als leere Klammer erscheint?
Also als Workaround, ich einen Weg schaffen, eine Möglichkeit, diese ungültigen Übereinstimmungen zu identifizieren, damit ich damit umgehen kann. Die beschädigten MatchData scheint ein guter Weg, dies zu tun. Bisher konnte ich sie jedoch nicht identifizieren. Wenn ich dies tun:
// "match" is an existing GKTurnBasedMatch object
NSLog(@"match data is: %@",[match matchData]);
NSLog(@"match data is nil? %@",[match matchData] == nil ? @"YES" : @"NO");
NSLog(@"match data equals empty nsdata? %@",[match matchData] == [NSData data] ? @"YES" : @"NO");
ich wie folgt zusammen:
match data is: <>
match data is nil? NO
match data equals empty nsdata? NO
So werden die Spieldaten als ein Paar von leeren Klammern zeigen nach oben „<>“, die hoffentlich würde identifiziert werden könnte als null, aber anscheinend nicht.
Übrigens, ich speichere diese MatchData in einer Kerndateneinheit unter einem NSData-Attribut. Und wenn ich den NSManagedObjectContext speichere, dann NSLogge das NSManagedObject, um zu sehen, was drin ist, wird das NSData-Attribut in Frage noch erscheint als "<>"!
Allerdings, wenn ich dann eine neue NSManagedObjectContext erstellen, retreive die gleiche NSManagedObject aus ihm heraus, dann NSLog seine Werte, das Attribut NSData jetzt als nil auftaucht.
So scheint es, dass Core-Daten an einem gewissen Punkt das Attribut zu seinem poper nil Wert "bereinigen". Mein Problem ist, dass ich diesen Wert als nullvor diesen Punkt identifizieren muss, zu der Zeit, wenn ich es zum Kerndatenspeicher hinzufüge.
Das hat den Trick, danke! – todd412
Hatte das gleiche Problem. Perfekte Antwort. – mondousage