代码之家  ›  专栏  ›  技术社区  ›  RickiG

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

  •  0
  • RickiG  · 技术社区  · 15 年前

    我有几个核心数据实体包含一堆空的 NSString 性质。

    我解析了一些XML,并设置了我可以获取的属性,并希望将“空”属性设置为“不可用”,如“不可用”中所示。因此,如果我的XML不包含它排序整理实体的值,通过给它一个“N/A”字符串,我可以稍后测试,也应该其中一个设置为uilabel,它将不会显示 (空) …这就引出了我的问题:

    我这样做是为了测试实体上的属性是否已经是sat,是 或为空:

        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];               
            }
        }
    

    然而,结果是,我仍然有很多值显示为 (空) . 所以我在想,房产可以不是 @"" 空的或 (nil)

    我相信nsmanagedObject应该是kvc兼容的,所以我做了一个测试,在测试中我逐属性复制了nsmanagedObject属性,唯一的区别是它是一个子类,而不是nsmanagedObject。 可悲的是,这种行为完全相同。它还将值保留为 (空)

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

    谢谢您

    3 回复  |  直到 15 年前
        1
  •  4
  •   Julien    15 年前

    您可以将实体的默认属性值设置为“N/A”(这是一个很好的实践,因为您可能希望将sqlite用于iPhone应用程序传送,但它不适用于空值,因为sqlite和cocoa没有相同的“空”愿景),并将“可选”设置为“否”。

     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
        }
    

    干杯

        2
  •  1
  •   Jaanus    15 年前

    什么是所有可能的?您可以这样做以获取所有属性:

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntityName" inManagedObjectContext:moc];
    
    for (NSString *attr in [entity attributesByName]) {
        [object setValue:@"n/a" forKey:attr];
    }
    
        3
  •  0
  •   Kendall Helmstetter Gelner    15 年前

    问题是,当某个值为零时,可以从任何托管对象属性(而不仅仅是字符串)中获得的值都是nsnull对象。所以如果你也检查 isKindOfClass:[NSNull class] 我认为你的代码会满足你的需要。