2014-12-07 19 views
7

Tôi đã triển khai tiện ích mở rộng Trình tìm kiếm đồng bộ hóa theo mẫu được cung cấp từ Apple.Tìm kiếm đồng bộ hóa: Người gửi được chuyển đến hành động là trường hợp khác nhau của NSMenuItem

Sau khi nhấp vào mục menu ngữ cảnh mới được tạo, hành động theo sau sampleAction được thực hiện. Rất tiếc, người gửi được chuyển đến phương thức không khớp với cá thể được tạo trong menuForMenuKind.

- (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu 
{ 
    NSMenuItem* menuItem = [[NSMenuItem alloc] initWithTitle:@"testTitle" action:@selector(sampleAction:) keyEquivalent:@""]; 
    menuItem.tag = 1; 

    // print menu attributes 
    NSLog(@"------------------original menu-----------------"); 
    NSLog(@"menu address: %p", menuItem); 
    NSLog(@"menu tag: %ld", menuItem.tag); 
    NSLog(@"menu title: '%@'", menuItem.title); 

    NSMenu *menu = [[NSMenu alloc] initWithTitle:@""]; 
    [menu addItem:menuItem]; 

    return menu; 
} 

- (IBAction)sampleAction:(id)sender 
{ 
    if([sender isKindOfClass:[NSMenuItem class]]) 
    { 
     NSMenuItem* menuItem = sender; 

     NSLog(@"------------------menu passed to action-----------------"); 
     NSLog(@"menu address: %p", menuItem); 
     NSLog(@"menu tag: %ld", menuItem.tag); 
     NSLog(@"menu title: '%@'", menuItem.title); 
    } 
} 

kết quả ở đầu ra sau đây sau khi tôi nhấp vào phần tử trong menu ngữ cảnh

2014-12-07 19:55:36.923 FinderSync Extension[1265:62630] ------------------original menu---------------- 
2014-12-07 19:55:36.923 FinderSync Extension[1265:62630] menu address: 0x6080000abbe0 
2014-12-07 19:55:36.924 FinderSync Extension[1265:62630] menu tag: 1 
2014-12-07 19:55:36.924 FinderSync Extension[1265:62630] menu title: 'testTitle' 
2014-12-07 19:55:40.328 FinderSync Extension[1265:62630] ------------------menu passed to action---------------- 
2014-12-07 19:55:40.328 FinderSync Extension[1265:62630] menu address: 0x6080000aba00 
2014-12-07 19:55:40.328 FinderSync Extension[1265:62630] menu tag: 0 
2014-12-07 19:55:40.328 FinderSync Extension[1265:62630] menu title: '' 

.

Có cơ hội nào để liên kết người gửi đến mục menu đã được nhấp vào không?

+0

Bạn có giải pháp nào cho điều này không? –

+0

Chưa, thật không may: ( –

+0

hmm cho Apple biết về nhu cầu của bạn bằng cách sử dụng hệ thống báo cáo lỗi Apple. Bây giờ tôi đang sử dụng bộ chọn khác nhau cho các mục menu khác nhau. –

Trả lời

7

Để tham khảo, đây rõ ràng là hành vi dự định. Tôi nộp một báo cáo lỗi với Apple, và đây là câu trả lời của họ:

vấn đề này hoạt động như dự định dựa trên những điều sau đây:

Finder Sync không giữ xung quanh NSMenuItem cụ thể * trường hợp, và rất ít tính được tôn trọng (chỉ tiêu đề, hành động, hình ảnh và được bật). Trong bản phát hành trong tương lai, thuộc tính -tag có thể được hỗ trợ, nhưng không phải là -representedObject. - Nếu bạn yêu cầu một tập các hành động động, có thể sử dụng các hàm như sel_registerName và method_setImplementation (in) để tạo các phương thức trong thời gian chạy.

1

Tài liệu FIFinderSyncController/FIFinderSyncProtocol cung cấp tài liệu tốt nhất cho các menu và phương pháp mà tôi có thể tìm thấy.

menu(for menu: FIMenuKind)

tính mục trình đơn cụ thể được sử dụng: tiêu đề, hành động, hình ảnh và kích hoạt.

Bắt đầu từ 10.11: thẻ, trạng thái và thụt lềLưu ý cũng hoạt động và menu phụ được cho phép.

Thuộc tính tag không tồn tại khi bạn hỏi câu hỏi này hiện được duy trì trong macOS 10.11+.

Thuộc tính representedObjectkhông tiếp tục tồn tại khi chúng tôi nhận được cuộc gọi lại, điều này cực kỳ hữu ích. Đối tượng NSMenuItem cũng khác nhau theo điểm đó.

Điều này không lý tưởng, nhưng trường hiện tại (và vô hình đối với người dùng) tag phải đủ để chuyển thông tin từ việc tạo menu và gọi lại hành động.

Các vấn đề liên quan