swift coredata - 无法识别的选择器发送到实例

时间:2016-04-11 15:00:51

标签: ios swift core-data

为coredata设置NSManagedObject的属性(NSSet)时,它将在运行时显示此错误:

public static <A, B> void handleEitherException(CompletionStage<A> a, CompletionStage<B> b, Consumer<Throwable> onException) {
    AtomicBoolean aCompletionStageHasFailed = new AtomicBoolean();
    handleEitherException(a, onException, aCompletionStageHasFailed);
    handleEitherException(b, onException, aCompletionStageHasFailed);
}

private static <U> void handleEitherException(CompletionStage<U> u, Consumer<Throwable> onException, AtomicBoolean aCompletionStageHasFailed) {
    u.handle((a, t) -> {
        if (t != null) {
            if (aCompletionStageHasFailed.compareAndSet(false, true)) {
                onException.accept(t);
                throw new RuntimeException(t);
            }
        }
        return null;
    });
}

首先,我不知道哪个实例被识别为0x1551ad60。

其次,我理解实例不理解'isEqualToSet',但我不是在我的代码中的任何地方调用它,这必然意味着它在某个地方被框架调用了?我猜我的代码不正确,但我不明白如何或在哪里。

我正在使用Swift运行Xcode 7.3(我认为是2.0?)我已经在iPad上多次删除/重新安装了该应用程序。

这是我的代码,问题行已标记。请帮忙,这让我很生气!

-[__NSArray0 isEqualToSet:]: unrecognized selector sent to instance 0x1551ad60

我的CoreData模型如下:

Car

Wheel

编辑:汽车关系“轮子”现在是一对多的关系。

编辑#2:代码已更新。

编辑#3:此问题的一个可能的解决方法是从Wheel“car”中删除反向关系。

3 个答案:

答案 0 :(得分:0)

var wheel_obj_array = [NSManagedObject]()

应该是

var wheel_obj_array = car_obj.mutableSetValueForKey("wheels")
wheel_obj_array.addObject(wheel_obj)

也不应该在vars中使用_,因此很难阅读任何内容。

答案 1 :(得分:0)

car_obj.setValue(NSSet(object: wheel_obj), forKey: "wheels")应该有用。

wheel_obj.setValue(car_obj, forKey: "relationship")会自动设置反向关系,可能更易于编写和读取。

顺便说一句,您可能希望将Wheel中的关系更改为car,而不是将当前的更改为 relationship

答案 2 :(得分:-1)

在我的情况下,它通过删除NSSet。发生错误时,我使用的代码是:

/www

然后为了使其有效我将其改为:

project.setValue(NSSet(object: agent), forKey: "agent")

谢谢