Objective c 试图将NSDictionary从swift类传递到目标c类时,发送到实例的选择器无法识别

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

我在swift中有一个类,它使用键中的字符串和值中的对象创建字典。例如
让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 bridged
SwiftDeferredNSDictionary
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)
}