使用带有NSAlert Panel和ARC的contextInfo传递数据的错误

时间:2012-02-05 02:59:32

标签: cocoa

这个问题的答案可能很简单,但目前我很难过,任何帮助都会受到欢迎。

我已将上下文菜单附加到表格视图。其中一个菜单选项是删除tableview中的元素。我正在使用NSAlert弹出一个模态窗口来确认删除。我想将tableview中的值传递给警报选择器,所以我有一些用于删除的引用。 这是警报字符串:

    [alert beginSheetModalForWindow:_window
        modalDelegate:self
        didEndSelector:@selector(deleteAlert:code:context:)
        contextInfo:s]; 

每次我尝试传递一个对象作为contextInfo我都会收到警告。如果我试图通过NSInteger的行(从实现代码如下行)我得到这个编译器警告:警告:语义问题:不兼容的整数指针转换发送“NSInteger的”(又名“长”),以类型的参数“无效*” 如果我尝试以变量名形式传递一个字符串,我得到:错误:自动引用计数问题:ARC不允许将Objective-C指针隐式转换为'void *'。我也试过没有运气的字典。

但是如果我传递一个这样的字符串:contextInfo:@“some info”,我没有得到任何错误,我实际上可以在选择器中看到它。这当然对我的需求毫无用处。

那么,如何将表行信息传递给警报,以便我可以在删除选择器中使用它?

1 个答案:

答案 0 :(得分:3)

如果要传递行索引,可以将其包装在NSNumber实例中:

[alert beginSheetModalForWindow:_window modalDelegate:self didEndSelector:@selector(deleteAlert:code:context:) contextInfo:(__bridge void *)[NSNumber numberWithInteger:row]];