Objective c 试图将NSDictionary从swift类传递到目标c类时,发送到实例的选择器无法识别
我在swift中有一个类,它使用键中的字符串和值中的对象创建字典。例如Objective c 试图将NSDictionary从swift类传递到目标c类时,发送到实例的选择器无法识别,objective-c,swift,nsdictionary,Objective C,Swift,Nsdictionary,我在swift中有一个类,它使用键中的字符串和值中的对象创建字典。例如让dict=[“key”:value.key]。值始终是字符串 当我在我的objective c类中获得数据时,对象类型是 _TtGCs26_SwiftDeferredNSDictionaryVs11AnyHashableP__$ 代码需要一个字典 现在当代码- NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dictionaryFromSwiftClas
让dict=[“key”:value.key]
。值始终是字符串
当我在我的objective c类中获得数据时,对象类型是
_TtGCs26_SwiftDeferredNSDictionaryVs11AnyHashableP__$
代码需要一个字典
现在当代码-
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dictionaryFromSwiftClass];
执行时,程序抛出错误
********[1235:641121] -[__SwiftValue encodeWithCoder:]: unrecognized selector sent to instance 0x280571380
我有一种预感,我在这里回答了一个类似的问题: 由于以下原因,您的案例会略有不同:
- (void)saveCartArray:(NSArray *)arrayToSave {
NSMutableArray *archiveArray = [NSMutableArray arrayWithCapacity:arrayToSave.count];
for (NSMutableDictionary* productDic in arrayToSave) {
NSData *productDicData = [NSKeyedArchiver archivedDataWithRootObject:productDic];
[archiveArray addObject:productDicData];
}
因此,如果我正确理解Swift bridgedSwiftDeferredNSDictionary
是NSArray*
中的元素,那么本质上是这样的。
如果你能抽出
NSData *productDicData = [NSKeyedArchiver archivedDataWithRootObject:productDic];
使用一种单独的方法,例如:
-(NSData*)dictionaryToData:(NSDictionary*)dic {
return [NSKeyedArchiver archivedDataWithRootObject:productDic];
}
并使用我的链接答案解决方案:
func mySwiftFunc(dic: Dictionary) {
myObjcClassInstance.perform(#selector(NSSelectorFromString("dictionaryToData:"), with: dic as NSDictionary)
}
您可以确保处理“real”
NSDictionary
并避免隐式的\uuuu SwiftValue
桥接。*******是我的项目名称(目标名称不同)您的arrayToSave NSLog似乎是字典而不是数组。它似乎是双字典,将assoc_prod、productData和qty作为具有相应值的3个键。但您正试图将其视为一个数组。请首先检查。哪个类是实例0x280571380
?字典中的所有对象(深层)是否与archivedDataWithRootObject:
?@an兼容?在另一种方法中,传递的字典/过去的字典保存到字典数组中,然后将该数组传递给此方法。NSLog打印在for循环中。@Willeke我在我的objective C类中得到了崩溃,特别是在行code
NSData*productDicData=[nsKeyedArchivedDataWithRootObject:productDic]<代码>代码谢谢,我用了类似的方法来解决这个问题issue@ChaitanyaSoni96很高兴听到这个消息。请将您的变体作为答案提供给未来的读者。
NSData *productDicData = [NSKeyedArchiver archivedDataWithRootObject:productDic];
-(NSData*)dictionaryToData:(NSDictionary*)dic {
return [NSKeyedArchiver archivedDataWithRootObject:productDic];
}
func mySwiftFunc(dic: Dictionary) {
myObjcClassInstance.perform(#selector(NSSelectorFromString("dictionaryToData:"), with: dic as NSDictionary)
}