如何识别出现为空括号的空NSData对象?

我正在处理Game Kit的GKTurnBasedMatch类中的腐败问题(请参阅此线程 ),有时会导致游戏状态无效,并且matchData损坏。

所以作为一个解决方法,我正在创build一个方法来识别这些无效匹配,所以我可以适当地处理它们。 损坏的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 

所以比赛数据显示为一对空括号“<>”,我希望可以被认定为零 ,但显然不是。

顺便说一下,我将这个matchData存储在一个NSData属性下的核心数据实体中。 而当我保存NSManagedObjectContext,然后NSLog的NSManagedObject看看里面有什么,有问题的NSData属性仍然显示为“<>”!

但是,如果我然后创build一个新的 NSManagedObjectContext,检索出相同的NSManagedObject, 然后 NSLog它的值,NSData属性现在显示为零

因此,核心数据似乎在某种程度上将属性“清理”到了无价值的地步。 我的问题是,我实际上需要将这个值标识为该点之前 ,当我将它添加到核心数据存储。

你正在做最后一种情况下的对象实例比较。 这两个实例都可能是空的,结果是不对的。

尝试这个:

  NSLog(@"match data equals empty nsdata? %@",[[match matchData] length] == 0 ? @"YES" : @"NO"); 

[NSData data]返回一个新的NSData对象,永远不会==一个现有的对象。 要检查它是否是一个空的NSData:

 [[match matchData] isKindOfClass:[NSData class]] && match.length == 0 

CoreData不会更改您在NSManagedObject实例上设置的值。 您必须设置一个空的NSData值。

要检查它是否为空数据,请检查其length属性。 空时应该为0。