【问题标题】:Objective-C Bridge NSArray CrashObjective-C 桥 NSArray 崩溃
【发布时间】:2015-08-08 07:37:05
【问题描述】:

我正在尝试将一些数据从 swift 文件发送到 Objective-c 文件。我有所有的桥接头和未配置的东西,这样当我传递一个字符串时,它可以被 Objective-c 文件使用。但是,我真的很想传递一个 NSArray,当我这样做时,我会收到一大堆以

开头的错误
[Swift._NSSwiftArrayImpl length]: unrecognized selector sent to instance 0x6000000363a0

我看到了Array element cannot be bridged to Objective-C,但该页面上的解决方案,即快速将数组切换为 NSArray,并使数组中的所有对象为 AnyObjects,但不起作用;此外,我得到的错误与上述问题的错误不同。这是我的精简代码:

斯威夫特:

var myNSArray = ["foo","bar"]
objectiveCClassInstance.arrayPassFunction(myNSArray)

.h:

- (void)arrayPassFunction:(NSArray*)myObjectiveCNSArray;

.m:

- (void)arrayPassFunction:(NSArray*)myObjectiveCNSArray{
    NSLog(myObjectiveCNSArray);
}

【问题讨论】:

    标签: objective-c arrays swift nsarray


    【解决方案1】:

    您对NSLog 的呼叫不正确。 NSLog的第一个参数是格式字符串。你的意思是:

    NSLog(@"%@", myObjectiveCNSArray);
    

    我很惊讶您没有收到关于此的警告。

    【讨论】:

    • 编译器确实发出“警告:格式字符串不是字符串文字(可能不安全)”
    • 对;这正是问题所在。您必须确保 ObjC 代码没有警告。我通常建议打开“将警告视为错误”。
    • ...并打开几乎所有警告。
    猜你喜欢
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 2012-01-31
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    相关资源
    最近更新 更多