这个问题的答案可能很简单,但目前我很困惑,欢迎任何帮助。
我已将上下文菜单附加到表格 View 。菜单选项之一是删除 TableView 中的元素。我正在使用 NSAlert 弹出模式窗口以确认删除。我想将 TableView 中的值传递到警报选择器,以便我有一些用于删除的引用。 这是警报字符串:
[alert beginSheetModalForWindow:_window
modalDelegate:self
didEndSelector:@selector(deleteAlert:code:context:)
contextInfo:s];
每当我尝试将对象作为 contextInfo 传递时,我都会收到警告。如果我尝试传递 NSInteger 行(来自 tableview 的行),我会收到此编译器警告:警告:语义问题:不兼容的整数到指针转换发送“NSInteger”(又名“long”)到类型“void *”的参数 如果我尝试以变量名形式传递字符串,我会得到以下信息:错误:自动引用计数问题:ARC 不允许将 Objective-C 指针隐式转换为“void *”。我也尝试过字典,但没有成功。
但是,如果我传递这样的字符串: contextInfo:@"some info",我不会收到任何错误,并且实际上可以在选择器中看到它。这当然对我的需求来说有点无用。
那么,如何将表行信息传递到警报中,以便我可以在删除选择器中使用它?
最佳答案
如果要传递行索引,可以将其包装在 NSNumber
实例中:
[alert beginSheetModalForWindow:_window modalDelegate:self didEndSelector:@selector(deleteAlert:code:context:) contextInfo:(__bridge void *)[NSNumber numberWithInteger:row]];
关于cocoa - 使用 contextInfo 与 NSAlertPanel 和 ARC 传递数据时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9146567/