【问题标题】:Context does not save the changes with error 1550上下文不保存错误 1550 的更改
【发布时间】:2013-05-06 02:51:10
【问题描述】:

我正在尝试更新实体并保存更改。我总是收到以下错误:

The operation couldn’t be completed. (Cocoa error 1550.)

方法:

- (BOOL) updateEvent:(EventDTO*)eventDTO{
    BOOL saved = YES;

    [self getDataCoreContext];

    if (context) {
        NSError *error;

        Event *myEvent = (Event *)[context existingObjectWithID:eventDTO.entitysID error:&error];

        myEvent.name = eventDTO.name;
        myEvent.descrptn = eventDTO.description;
        myEvent.date = eventDTO.date;
        myEvent.locLatitude = [eventDTO getLatidude];
        myEvent.locLongitude = [eventDTO getLongitude];
        myEvent.numberOfInvited= [NSNumber numberWithInteger:[eventDTO.invitedMembers count]];

        for (User *invUser in eventDTO.invitedMembers) {
            [myEvent addInvitedUsersObject:invUser];
        }

        for (User *accUser in eventDTO.acceptedMembers) {
            [myEvent addAcceptedUsersObject:accUser];
        }

        myEvent.createdBy = (User*)[context existingObjectWithID:eventDTO.creator.objectID error:&error];

        if (![context save:&error]) {
            NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
            saved = NO;
        }
    }
    return saved;
}

这真的让我很困惑,因为我不明白问题是什么。我还尝试获取对象并对其进行修改。但同样的错误。

任何解释或提示都会很棒。

编辑(完整错误对象)1:

ERROR: Error Domain=NSCocoaErrorDomain Code=1550 "The operation couldn’t be completed. (Cocoa error 1550.)" UserInfo=0x14a00130 {NSValidationErrorObject=<Event: 0x11024aa0> (entity: Event; id: 0x166c0840 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8> ; data: {
    acceptedUsers =     (
    );
    createdBy = "0x11024ae0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p1>";
    date = "2013-05-11 16:15:09 +0000";
    descrptn = Auauuauau;
    invitedUsers =     (
        "0x11069cd0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p3>",
        "0x1104da60 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p6>",
        "0x1104da40 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p4>",
        "0x110687a0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p2>",
        "0x1104da50 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p5>"
    );
    locLatitude = "51.45373916625977";
    locLongitude = "7.264190196990967";
    name = lALLALLa;
    numberOfInvited = 5;
}), NSValidationErrorKey=invitedUsers, NSLocalizedDescription=The operation couldn’t be completed. (Cocoa error 1550.), NSValidationErrorValue=Relationship 'invitedUsers' on managed object (0x11024aa0) <Event: 0x11024aa0> (entity: Event; id: 0x166c0840 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8> ; data: {
    acceptedUsers =     (
    );
    createdBy = "0x11024ae0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p1>";
    date = "2013-05-11 16:15:09 +0000";
    descrptn = Auauuauau;
    invitedUsers =     (
        "0x11069cd0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p3>",
        "0x1104da60 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p6>",
        "0x1104da40 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p4>",
        "0x110687a0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p2>",
        "0x1104da50 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p5>"
    );
    locLatitude = "51.45373916625977";
    locLongitude = "7.264190196990967";
    name = lALLALLa;
    numberOfInvited = 5;
}) with objects {(
    <User: 0x110accb0> (entity: User; id: 0x11069cd0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p3> ; data: {
    acceptedEvents = "<relationship fault: 0x97084a0 'acceptedEvents'>";
    createdEvents = "<relationship fault: 0x97017b0 'createdEvents'>";
    deviceInfo = nil;
    displayName = "Daniel Higgins";
    invitedToEvents =     (
        "0x110abbb0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8>",
        "0x166c0840 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8>",
        "0x110abba0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p5>"
    );
    memberShipDetails = nil;
    phoneNumber = "555-478-7672";
    realName = "Daniel Higgins";
    status = "WAZZUUP?!";
    userID = nil;
}),
    <User: 0x110d0e10> (entity: User; id: 0x1104da60 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p6> ; data: {
    acceptedEvents = "<relationship fault: 0x14aa0850 'acceptedEvents'>";
    createdEvents = "<relationship fault: 0x13c0f290 'createdEvents'>";
    deviceInfo = nil;
    displayName = "Hank Zakroff";
    invitedToEvents =     (
        "0x110abbb0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8>",
        "0x166c0840 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8>",
        "0x110abba0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p5>"
    );
    memberShipDetails = nil;
    phoneNumber = "(555) 766-4823";
    realName = "Hank Zakroff";
    status = "WAZZUUP?!";
    userID = nil;
}),
    <User: 0x110ad1a0> (entity: User; id: 0x1104da40 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p4> ; data: {
    acceptedEvents = "<relationship fault: 0x16632850 'acceptedEvents'>";
    createdEvents = "<relationship fault: 0x16632890 'createdEvents'>";
    deviceInfo = nil;
    displayName = "John Appleseed";
    invitedToEvents =     (
        "0x110abbb0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8>",
        "0x166c0840 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8>",
        "0x110abba0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p5>"
    );
    memberShipDetails = nil;
    phoneNumber = "888-555-5512";
    realName = "John Appleseed";
    status = "WAZZUUP?!";
    userID = nil;
}),
    <User: 0x110b3220> (entity: User; id: 0x110687a0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p2> ; data: {
    acceptedEvents = "<relationship fault: 0x110f50f0 'acceptedEvents'>";
    createdEvents = "<relationship fault: 0x16628a60 'createdEvents'>";
    deviceInfo = nil;
    displayName = "Kate Bell";
    invitedToEvents =     (
        "0x110abbb0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8>",
        "0x166c0840 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8>",
        "0x110abba0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p5>"
    );
    memberShipDetails = nil;
    phoneNumber = "(555) 564-8583";
    realName = "Kate Bell";
    status = "WAZZUUP?!";
    userID = nil;
}),
    <User: 0x110ace30> (entity: User; id: 0x1104da50 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/User/p5> ; data: {
    acceptedEvents = "<relationship fault: 0x1a4c6350 'acceptedEvents'>";
    createdEvents = "<relationship fault: 0x1a4c6390 'createdEvents'>";
    deviceInfo = nil;
    displayName = "Anna Haro";
    invitedToEvents =     (
        "0x110abbb0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8>",
        "0x166c0840 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8>",
        "0x110abba0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p5>"
    );
    memberShipDetails = nil;
    phoneNumber = "555-522-8243";
    realName = "Anna Haro";
    status = "WAZZUUP?!";
    userID = nil;
})
)}}

编辑 2:

根据@Sulthan 的精彩解释,我发现了问题。

在我的 for 循环中,我必须检查该用户是否已存在于该事件中:

for (User *invUser in eventDTO.invitedMembers) {
    BOOL existsInInvitedList = [[eventDTO.invitedMembers valueForKeyPath:@"objectID"] containsObject:invUser.objectID];
    if (!existsInInvitedList) {
        [myEvent addInvitedUsersObject:invUser];
    }
}


for (User *accUser in eventDTO.acceptedMembers) {
    BOOL existsInAcceptedList = [[eventDTO.acceptedMembers valueForKeyPath:@"objectID"] containsObject:accUser.objectID];
    if (!existsInAcceptedList) {
        [myEvent addAcceptedUsersObject:accUser];
    }
}

所以那里没有重复..

【问题讨论】:

  • 您是否在创建托管对象上下文的同一线程上更新您的对象?
  • 好吧,我不使用线程,所以是的..
  • 能否显示NSLog(@"%@", error)的输出,即“完整”错误对象。
  • @MartinR 我更新了问题
  • 我觉得有些可疑:用户对象的 invitedToEvents 列表包含两次相同的对象 ID &lt;x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8&gt;

标签: objective-c core-data nsmanagedobject nsmanagedobjectcontext


【解决方案1】:

解释:

NSValidationErrorObject=<Event: 0x11024aa0> ...

这是您尝试保存但验证失败的对象

NSValidationErrorKey=invitedUsers

这是验证失败的属性(关系)

NSValidationErrorValue=Relationship 'invitedUsers' on managed object (0x11024aa0)

什么验证失败。其他一切都是关系中的用户列表...

我不知道您的对象模型,但例如以下内容似乎是错误的:

invitedToEvents =     (
        "0x110abbb0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8>",
        "0x166c0840 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p8>",
        "0x110abba0 <x-coredata://9F88714B-84EC-4E8F-9BC4-78E365A8FE0A/Event/p5>"
    );

请注意,其中一个事件存在两次(它具有相同的对象 ID)。

【讨论】:

  • 感谢您的回答。今晚我会检查它!
  • 很好,关键是我无法解释自己是怎么来的......:S
  • @SaifDeen 你是如何设置用户和事件之间的关系的?
  • 我找到了 :) 给了你信任,因为你让我走上了正确的道路。
  • @laucel,在我的问题上结帐 EDIT2,我必须检查我想要添加到我的关系中的对象是否已经存在。
【解决方案2】:

Cocoa 错误 1550 意味着您有一个“悬空”指针,更具体地说,是对指向无处的关系的引用...我假设您可能从 existinObjectWithID 方法之一中得到 nil ?

【讨论】:

    【解决方案3】:

    我也遇到了 1550 错误代码。我不小心更改了数据模型和 修改了实体中关系之一的目的地。确保仔细检查 NSValidationErrorObject 描述的实体和 NSValidationErrorKey 描述的关系是否符合您的预期。

    【讨论】:

      猜你喜欢
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多