我想使用MR_ImportFromObject方法从字典创建实体。
在我将Xcode 6更新到7之前,它起作用了。
但是,当我使用Xcode7时,ImportFromObject方法不起作用。
每次调用该方法,willImport Delegate方法都不会被调用,并且应用程序将崩溃。
但是ImportFromArray方法工作得很好。
这是错误消息。我认为要点是“swift_bridgeNonVerbatimFromObjectiveC”和“值类型未桥接到Objective-C”。
libswiftCore.dylib`swift_bridgeNonVerbatimFromObjectiveC:
0x1060d4d50 :pushq%rbp
0x1060d4d51 :movq%rsp,%rbp
0x1060d4d54 :pushq%r15
0x1060d4d56 :pushq%r14
0x1060d4d58 :pushq%r12
0x1060d4d5a :pushq%rbx
0x1060d4d5b :movq%rdx,%r14
0x1060d4d5e :movq%rsi,%rbx
0x1060d4d61 :movq%rdi,%r15
0x1060d4d64 :leaq 0x54a15(%rip),%rsi; _TMpSs21_ObjectiveCBridgeable
0x1060d4d6b :movq%rbx,%rdi
0x1060d4d6e : call 0x1060d4610; swift_conformsToProtocol
0x1060d4d73 :movq%rax,%r12
0x1060d4d76 :testq%r12,%r12
0x1060d4d79 :je 0x1060d4dc9;
0x1060d4d7b :movq%rbx,%rdi
0x1060d4d7e :movq%rbx,%rsi
0x1060d4d81 : call * 0x8(%r12)
0x1060d4d86 :测试b%al,%al
0x1060d4d88 :je 0x1060d4e49;
0x1060d4d8e :movq%rbx,%rdi
0x1060d4d91 :movq%rbx,%rsi
0x1060d4d94 : call * 0x10(%r12)
0x1060d4d99 :movq%r15,%rdi
0x1060d4d9c :movq%rax,%rsi
0x1060d4d9f : call 0x1060d2100; swift_dynamicCastUnknownClass
0x1060d4da4 :testq%rax,%rax
0x1060d4da7 :je 0x1060d4e49;
0x1060d4dad :movq 0x20(%r12),%r8
0x1060d4db2 :movq%rax,%rdi
0x1060d4db5 :movq%r14,%rsi
0x1060d4db8 :movq%rbx,%rdx
0x1060d4dbb :movq%rbx,%rcx
0x1060d4dbe :popq%rbx
0x1060d4dbf :popq%r12
0x1060d4dc1 :popq%r14
0x1060d4dc3 :popq%r15
0x1060d4dc5 :popq%rbp
0x1060d4dc6 :jmpq *%r8
0x1060d4dc9 :movq(%rbx),%rcx
0x1060d4dcc :xorl%eax,%eax
0x1060d4dce :cmpq $ 0x80,%rcx
0x1060d4dd5 :cmovbeq%rcx,%rax
0x1060d4dd9 :cmpq $ 0xf,%rax
0x1060d4ddd :jne 0x1060d4df1;
0x1060d4ddf :teSTL $ 0x80ffffff,0x10(%rbx)
0x1060d4de6 :jne 0x1060d4e49;
0x1060d4de8 :leaq 0x54959(%rip),%r12; Swift._BridgeableMetatype的协议见证表:Swift中的Swift._ObjectiveCBridgeable
0x1060d4def :跳0x1060d4d7b;
0x1060d4df1 :cmpq $ 0xd,%rax
0x1060d4df5 :jne 0x1060d4e49;
0x1060d4df7 :movq 0x8(%rbx),%rax
0x1060d4dfb :movq(%rax),%rcx
0x1060d4dfe :xorl%eax,%eax
0x1060d4e00 :cmpq $ 0x80,%rcx
0x1060d4e07 :cmovbeq%rcx,%rax
0x1060d4e0b :leaq 0x54936(%rip),%r12; Swift._BridgeableMetatype的协议见证表:Swift中的Swift._ObjectiveCBridgeable
0x1060d4e12 :cmpq $ 0x3f,%rax
0x1060d4e16 :jg 0x1060d4e33;
0x1060d4e18 :cmpq $ 0xf,%rax
0x1060d4e1c :ja 0x1060d4d7b;
0x1060d4e22 :movl $ 0xb706,%ecx
0x1060d4e27 :btq%rax,%rcx
0x1060d4e2b :jae 0x1060d4d7b;
0x1060d4e31 :跳0x1060d4e49;
0x1060d4e33 :leaq -0x40(%rax),%rcx
0x1060d4e37 :cmpq $ 0x2,%rcx
0x1060d4e3b :jb 0x1060d4e49;
0x1060d4e3d :cmpq $ 0x80,%rax
0x1060d4e43 :jne 0x1060d4d7b;
0x1060d4e49 :leaq 0x4467e(%rip),%rax; “值类型未桥接到Objective-C”
0x1060d4e50 :movq%rax,0x86561(%rip); gCRAnnotations + 8
0x1060d4e57 :int3
-> 0x1060d4e58 :nopl(%rax,%rax)
最佳答案
我现在从更改了MagicalRecord MR_importFromObject库
id value = [objectData MR_valueForAttribute:primaryAttribute];
if (primaryAttribute != nil)
{
managedObject = [self MR_findFirstByAttribute:[primaryAttribute name] withValue:value inContext:context];
}
至
if (primaryAttribute != nil)
{
id value = [objectData MR_valueForAttribute:primaryAttribute];
managedObject = [self MR_findFirstByAttribute:[primaryAttribute name] withValue:value inContext:context];
}
您可以将其放在NSManagedObject的类别或扩展名(交换)中,并在MagicalRecord修复此问题之前使用它。那就是我要做的。这为我解决了这次崩溃。