如何识别显示为空括号的空NSData对象?

时间:2013-04-02 20:10:58

标签: ios nsdata gamekit null gkturnbasedmatch

我正在处理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 ,此时我将其添加到核心数据存储中。

3 个答案:

答案 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。