虽然参数列表中存在nil,但在方法调度时缺少标记

时间:2014-05-07 13:25:06

标签: ios objective-c cocoa-touch compiler-warnings sentinel

我想创建一个UIActionSheet,但我总是收到关于“失踪哨兵”的警告:

  

/ Users / .... mm:136:173:警告:方法调度中缺少哨兵[-Wsentinel]

UIActionSheet* adsl_action_sheet = [[[UIActionSheet alloc] initWithTitle:nil 
                                                                delegate:(id<UIActionSheetDelegate>)self 
                                                       cancelButtonTitle:[dsd_string_localizer ms_get_localized_system_string:@"Cancel"] 
                                                  destructiveButtonTitle:nil 
                                                       otherButtonTitles:[dsd_string_localizer ms_get_localized_system_string:@"Logoff"], [dsd_string_localizer ms_get_localized_system_string:@"Disconnect"], nil] autorelease];

我真的看不出任何错误......也许我只是失明。

包含此代码的文件是Objective-C ++文件。

我也注意到它在每个需要这样一个哨兵的地方都会显示这些“哨兵警告”。

2 个答案:

答案 0 :(得分:1)

从编译器输出中我相信你没有在可变方法调用结束时正确地放置nil

答案 1 :(得分:1)

您需要使用以下内容将最终的“哨兵”nil投射到正确的类型:

... , (NSString *)nil] autorelease];
//    ^^^^^^^^^^^^

但是,我不确定为什么编译器需要这个演员。

相信在使用-Wstrict-null-sentinel进行编译时这是必要的(等待来自OP的确认)。