我有几个核心数据实体,其中包含一堆空的NSString
属性。
我解析了一些XML并设置了我可以获取的属性,并希望将“空”的设置为“不可用”,如“不可用”。因此,如果我的XML不包含值,它会通过给它一个“n / a”字符串来整理实体,我可以稍后测试它,如果其中一个字符串使它成为UILabel它将不会显示 (null) ..这引出了我的问题:
我这样做是为了测试实体上的属性是否已经存在,是 nil 还是为空:
for(NSString *s in allPossibleStrings) {
if([[f valueForKey:s] isKindOfClass:[NSString class]] && [[f valueForKey:s] isEqualToString:@""]) {
[f setValue:@"n/a" forKey:s];
}
if ([[f valueForKey:s] isKindOfClass:[NSString class]] && [f valueForKey:s] == nil) {
[f setValue:@"n/a" forKey:s];
}
}
但事实证明,我仍然会将很多值显示为(null)。
所以我认为该属性不是@""
空或(nil)
我相信NSManagedObject应该符合KVC,所以我做了一个测试,我按属性复制了我的NSManagedObject属性,唯一的区别是它只是NSObject的子类而不是NSManagedObject。 可悲的是,这种行为完全相同。它还将值保留为(null)
希望有人能够接受我在这些字符串测试中出错的地方:)
谢谢
答案 0 :(得分:4)
您可以将实体的默认属性值设置为“N / A”(这是一个很好的做法,因为您可能希望使用sqlite进行iPhone应用程序发送,并且它不能很好地处理空值,因为sqlite和可可不具有“null”的相同视野,并将“可选”设置为“否”。
if([[f valueForKey:s] isKindOfClass:[NSString class]] && [[f valueForKey:s] isEqualToString:@"NA"]) {
//Tell your program to know that it's null if it needs to know
}
干杯
答案 1 :(得分:1)
什么是allPossibleStrings?您可以这样做以获取所有属性:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntityName" inManagedObjectContext:moc];
for (NSString *attr in [entity attributesByName]) {
[object setValue:@"n/a" forKey:attr];
}
答案 2 :(得分:0)
问题在于,当某些内容为零时,您可以从任何托管对象属性(而不仅仅是字符串)返回的内容是NSNull对象。因此,如果您同时检查isKindOfClass:[NSNull class]
我认为您的代码将按照您的要求执行。