我正在处理Game Kit的GKTurnBasedMatch类中的损坏问题(请参阅this thread),这有时会导致游戏状态无效,matchData也会损坏。
因此,作为一种解决方法,我正在创建一种识别这些无效匹配的方法,以便我可以适当地处理它们。损坏的matchData似乎是一种很好的方法。但是,到目前为止,我一直无法识别它们。当我这样做时:
// "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");
我得到以下内容:
match data is: <>
match data is nil? NO
match data equals empty nsdata? NO
所以匹配数据显示为一对空括号“&lt;&gt;”,我希望可以将其识别为 nil ,但显然不是。
顺便说一句,我将此matchData存储在NSData属性下的核心数据实体中。当我保存NSManagedObjectContext,然后NSLog NSManagedObject以查看其中的内容时,有问题的NSData属性仍然显示为“&lt;&gt;”!
但是,如果我然后创建一个 new NSManagedObjectContext,从中删除相同的NSManagedObject,然后 NSLog其值,NSData属性现在显示为零
因此,似乎在某些时候,核心数据将属性“清理”为其强大的 nil 值。我的问题是,我确实需要在 之前将此值标识为 nil ,此时我将其添加到核心数据存储中。
答案 0 :(得分:19)
您正在对上一个案例中的对象实例进行比较。这两个实例都可能是空的,结果不是真的。
试试这个:
NSLog(@"match data equals empty nsdata? %@",[[match matchData] length] == 0 ? @"YES" : @"NO");
答案 1 :(得分:3)
[NSData data]
返回一个新的NSData
对象,它永远不会= =现有对象。检查它是否为空的NSData:
[[match matchData] isKindOfClass:[NSData class]] && match.length == 0
答案 2 :(得分:2)
CoreData不会更改您在NSManagedObject
实例上设置的值。您必须设置一个空的NSData
值。
要检查它是否为空数据,请检查其length
属性。空的时候应该是0。