代码之家  ›  专栏  ›  技术社区  ›  Tim Sullivan

核心数据:强制字段保存失败,但需要设置值!

  •  2
  • Tim Sullivan  · 技术社区  · 15 年前

    我有一个抽象实体 Block 它包含两个属性: column order (非可选)和一种关系, thing ,其中是1->m的详细信息。我有另一个实体, Whatever ,有 街区 并添加一个属性, someNumber .

    我的代码如下:

    Whatever *block = (Whatever *)[NSEntityDescription insertNewObjectForEntityForName:@"Whatever" inManagedObjectContext:managedObjectContext];
    block.order = 0;
    block.column = 0;
    block.thing = self.thing;
    

    当我尝试保存时,我得到以下错误:

    Failed to save to data store: Operation could not be completed. (Cocoa error 1560.)
    DetailedError: {
      NSLocalizedDescription = "Operation could not be completed. (Cocoa error 1570.)";
      NSValidationErrorKey = column;
      NSValidationErrorObject = <Whatever: 0x5124890> (entity: someWhatever; id: 0x511b4e0 <x-coredata:///Whatever/t718B63A4-927B-4D88-A9E6-7F61CF9621675> ; 
      data: {
        column = nil;
        thing = 0x54367a0 <x-coredata://E6648244-E5FC-4202-B5F9-C7A91BACF8DA/Thing/p2>;
        order = nil;
        someNumber = 0;
      });
    

    我不明白为什么这么说 秩序 nil 因为我之前刚给他们定了线,所以这不应该是个问题。

    我试过用 [block setColumn:0] 风格也一样,没有成功。

    任何帮助都将不胜感激。谢谢!

    2 回复  |  直到 13 年前
        1
  •  5
  •   gerry3    15 年前

    因为nil只是一个空或零指针值,所以您将它们设置为nil。

    核心数据属性必须设置为对象(与基元类型相反)。

    整数和浮点数是nsnumber对象。

    我喜欢使用带*便利构造器的数字。

    例如:

    block.order = [NSNumber numberWithInteger:0];
    block.column = [NSNumber numberWithInteger:0];
    
        2
  •  1
  •   Tim Sullivan    13 年前

    为了扩展gerry3的答案,使用rentzsch可以简化核心数据的编码。 mogenerator . 它将允许您执行以下操作:

    block.orderValue = 0;
    block.columnValue = 0;