cocoa - 使用 contextInfo 与 NSAlertPanel 和 ARC 传递数据时出错

标签 cocoa

这个问题的答案可能很简单,但目前我很困惑,欢迎任何帮助。

我已将上下文菜单附加到表格 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/

相关文章:

cocoa - 提高 CALayer 过滤器的性能

iphone - 为动态表单元格添加 header 和 NSArray

html - 黑色输入背景 - Cocoa WebView

cocoa - NSSavePanel、setAccessoryView 和动画

cocoa - OpenStep作为开发环境的最新情况如何?

macos - Swift NSStackView : Learn By Doing. 我做错了什么?

cocoa - Hillegass : Cocoa Prog 3rd Ed: Ch. 33 在 OpenGL : Where's the Matrix? 上

ios - MKMapView 重置回世界 View

objective-c - 定义新的根类有哪些用例?

objective-c - 自动保存并非源自用户的 NSDocument 模型更改