Carbon と Cocoa の両方のバージョンの Spotlight API をいじっていますが、同じ問題が時々発生するようです。クエリは実行されず、通知も発生しません。ただし、ほとんどの場合は実行されるため、何か奇妙なことが起こっていることを強調したいと思います。
私は特定のアプリを書いているわけではありません。これは単なる Spotlight テスト ハーネスであるため、クエリはユーザー入力に基づいて実行されません。代わりにapplicationDidFinishLaunching:
、コントローラー内で構成および実行されます。もともとこれを で実行しようとしましawakeFromNib
たが、その場合、クエリは実行されませんでした。(私の理論では、RunLoop はまだ開始されていませんが、よくわかりません。)
applicationDidFinishLaunching:
Carbonのコードは次のとおりです。
CFStringRef predicate = CFSTR("kMDItemContentTypeTree == 'public.movie'");
_query = MDQueryCreate(NULL, predicate, NULL, NULL);
_query = (MDQueryRef)CFMakeCollectable(_query);
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(notify:)
name:nil
object:(id)_query];
MDQueryExecute(_query, kMDQueryWantsUpdates);
以上、記憶で書いたので、原文にない誤字脱字があるかもしれません。元のコードは、時々まったく動作しないことを除けば、問題なくコンパイルおよび実行されます。
何を与える?おそらくapplicationDidFinishLaunching:
、Spotlight クエリには適切な場所ではありません。