核心数据实体属性的初始值?

时间:2010-02-01 18:50:06

标签: iphone cocoa nsstring

我有几个核心数据实体,其中包含一堆空的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)

希望有人能够接受我在这些字符串测试中出错的地方:)

谢谢

3 个答案:

答案 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]我认为您的代码将按照您的要求执行。