Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 查找同步扩展的奇怪行为';s工具栏项目菜单_Cocoa_Nsmenu_Nsmenuitem_Appstore Sandbox_Findersync - Fatal编程技术网

Cocoa 查找同步扩展的奇怪行为';s工具栏项目菜单

Cocoa 查找同步扩展的奇怪行为';s工具栏项目菜单,cocoa,nsmenu,nsmenuitem,appstore-sandbox,findersync,Cocoa,Nsmenu,Nsmenuitem,Appstore Sandbox,Findersync,我正在构建一个带有Finder Sync扩展的macOS应用程序,它在Finder中添加了一个工具栏项 我创建了工具栏项菜单,如下所示: - (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu { NSMenu *menu = [NSMenu new]; NSURL *URL = ...// Create a NSURL dynamically NSMenuItem *item = [NSMenuItem new];

我正在构建一个带有Finder Sync扩展的macOS应用程序,它在Finder中添加了一个工具栏项

我创建了工具栏项菜单,如下所示:

- (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu {
    NSMenu *menu = [NSMenu new];

    NSURL *URL = ...// Create a NSURL dynamically

    NSMenuItem *item = [NSMenuItem new];
    [item setTitle:@"foo"];
    [item setRepresentedObject:URL];
    [item setTarget: self];
    [item setAction:@selector(itemClicked:)];

    [menu addItem:item];

    return menu;
}

- (void)itemClicked:(NSMenuItem *)item {
    NSLog(@"%@", item.representedObject);
}
该项目确实显示了标题“foo”,但当我点击它时,
(null)
已打印出来

我还尝试使用
@property(NSURL*)URL
创建
NSMenuItem
的子类,并在创建项目时设置URL属性,但单击后URL属性再次变为零


那么这里出了什么问题呢?

右键单击Finder时显示的菜单和菜单项是
菜单中提供的菜单项的副本(对于菜单:FIMenuKind)

并非所有菜单项的属性都会在副本中保留下来,从而导致为
representedObject
获得的
nil
值。NSMenuItem子类也肯定不会被保留

有关Apple的更多信息,请参阅FinderSync标头:

可选公共功能菜单(用于菜单:FIMenuKind)->NSMenu?

使用特定的菜单项属性:
标题
操作
图像
,和
启用

从10.11开始:
标记
状态
缩进级别
也可以工作,并且允许使用子菜单


使用菜单项的
标题
字符串或
标记
来确定所需的URL可能是最好的选择。

Thx!最后,我将URL保存为NSUserDefaults中的数组,并将每个项目的标记设置为数组中其URL的索引。