問題タブ [nsmetadataquery]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2992 参照

ios - NSMetaDataQuery を作成し、バックグラウンド スレッドで結果を取得するにはどうすればよいですか?

デフォルトNSMetaDataQueryでは、結果通知はメイン スレッドで受信されます。query.startQueryメインスレッドで呼び出す必要があるようですが[query.setOperationQueue:]、結果通知が送信されるキューを設定するために使用できます。

理想的には、バックグラウンド スレッドがこれらの結果を受信して​​処理することを望み、見つかったファイルに応じて、変数を設定するか、通知をメイン スレッドに投稿します。

私が理解していないのは、操作キューを作成する方法と、このキューで通知を処理する方法です。必要なクラスのサンプルコードと、それらを作成する場所と方法の詳細は素晴らしいでしょう。Apple のドキュメントを読みましたが、通知を処理できるキューを作成する方法がわかりません。

ありがとう

0 投票する
1 に答える
77 参照

uitableview - ソートが必要な非同期コンテンツを UITableView に正しく入力する方法

iCloudに保存されているさまざまなサイズ(> 100)のファイルがたくさんあります。NSMetadataQueryこれらのファイルを返す があります。それらはNSMetadataQueryオブジェクトからランダムな順序でアプリに報告されます。

それらを開いていくつかの文字列を抽出し、それらを並べ替えてUITableView.

私は2つのアプローチを試しました.A)各ファイルをロードし、ファイル情報の配列をソートreloadDataし、UITableView毎回呼び出す. B)すべてのファイルがロードされるのを待ってから、「完全な」配列をソートしてから1回呼び出しますreloadData

オプション B の方が明らかに優れていますが、基本的には、ユーザーが結果を確認するのに同じくらい時間がかかります。これをどのように行うのが最善ですか?

UITableView表示するデータを別のファイル (PLIST など)に抽出して、実際のデータがバックグラウンドで読み込まれている間にすばやく読み込んで表示できるようにする必要がありますか? または、配列を追跡reloadRowsAtIndexPaths:し、ソートのために後で変更される各行を呼び出すことにより、基本的に実装 A を拡張する必要がありますか?

このシナリオのベスト プラクティスは何ですか?

ありがとう

0 投票する
1 に答える
424 参照

c++ - NSMetaDataQuery: 更新または収集の通知が届かない

NSMetaDataQuery を使用して、バンドル識別子に基づいてアプリケーション パスを取得するコードを試しています。Apple 開発サイトにあるサンプル コードに従っていました: 静的スポットライト検索の実装。

私はそれのために次のファイルを書きました

定義は次のとおりです。

GetAppPAthでメソッドを呼び出していmainます。必要なヘッダー ファイルを追加しました。コードはコンパイルおよび実行されますが、2 つのオブザーバーに通知がありません。2 つのメソッドqueryDidUpdate&にブレークポイントを設定しましたinitalGatherComplete。しかし、彼らは決して打たれることはありません。私のメインコードが検索の完了を待っていなかったことが失敗の原因だと思いました。しかし、メインで待機しても機能しませんでした。次の質問のコードも試してみました。NSMetadataQuery をよく理解していません が、無限whileループで終了しました。

0 投票する
0 に答える
360 参照

objective-c - NSMetaDataQuery と NStableView データ ソース メソッドを使用して Spotlight 機能を実装する

を使用してプロジェクトにスポットライト機能を実装しNSMetadataQueryました。通知を受信すると、のをNSMetadataQueryDidFinishGatheringNotificationフォーマットした後、tableView メソッドの reloadData メソッドを呼び出しています。以下の2つの問題に直面しています。NSMetadataItemNSMetadataQuery

  1. [query startQuery]Macに巨大なデータがあると時間がかかりすぎます。
  2. 取得できませんNSMetadataQueryDidUpdateNotification

NSArrayControllerの代わりに使用NStableViewDataSourceしてバインドすると、検索が高速になりquery.resultsます。をフォーマットする必要がある NSMetadataItemため、使用できません。

のパフォーマンスを向上させるためにバッチ通知を受け取る方法に誰でも答えることができますかNSMetaDataQuery? またはパフォーマンスを向上させるその他の方法[query startQuery]

以下は私が実装したコードです。

0 投票する
1 に答える
287 参照

ios - iCloud - NSMetadataQuery が古い結果を返し、削除されたファイルを表示する

タイトルが示すように、iCloud への NSMetadataQueries は、iCloud から削除したばかりのファイルを表示することがあります。

削除した後でもダウンロードできます。クエリが間違った結果を返す原因を知っている人はいますか?これを防ぐために何ができますか?

0 投票する
1 に答える
511 参照

ios - NSMetadataQuery の更新通知が干渉する (実行ループ?)

先週、Apple のエンジニアにメールでNSMetadataQuery.

メールは次のとおりです。

やあ、

ドキュメント ベースのアプリまたは iOS を作成していますが、名前を変更する (ドキュメントを新しい場所に移動する) メソッドが、実行中の NSMetadataQuery と競合しているようです。

move メソッドが呼び出された後、クエリは数回更新されます。最初は移動したばかりのアイテムの古い URL を持ち、次は新しい URL を持ちます。ただし、更新後に URL が削除された場合の更新方法 (以下) により、モデルは削除された URL を削除し、まだ存在しない URL が見つかった場合はその逆を行います。

私の問題は 2 つの問題のうちの 1 つであると思います。NSMetadataQuery の更新方法が不十分であり、項目の URL を削除する前に「正しい」属性をチェックしていないかのいずれかです (ドキュメントを見ても、私が示唆するようなものは何も表示されません)。 m 何かが足りない) または私の名前変更方法が本来あるべきことをしていません。

名前変更メソッドの開始時に更新を無効にし、すべての完了ブロックが終了したら再度有効にしようとしましたが、違いはありません。

私の NSMetadataQuery の update メソッド:

そして私の名前変更方法:

ほぼ即座に返信がありましたが、それ以降、返信はありません。

返信はこちら

私が思いつく大きなことの 1 つは、disableUpdates() と enableUpdates() の使い方です。実行ループの同じターンで両方を実行していますが、NSMetadataQuery は結果を非同期に配信します。このコードは更新通知内で実行されるため、クエリに対して同期的に実行されます。したがって、クエリの観点からは、通知を投稿することで更新の配信を開始します。通知の投稿は同期プロセスであるため、通知の投稿中は更新が無効になり、再度有効になります。したがって、クエリが通知の送信を完了するまでには、結果の配信を開始したときとまったく同じ状態に戻ります。それはあなたが望んでいる動作ではないようです。

ここで助けが必要です

NSMetadataQuery には、更新が無効になっている間に結果を追加するある種のキャッシュがあり、有効にすると、それらの (おそらく多くの) キャッシュ結果がループされ、それぞれが更新通知を介して送信されると仮定しました。

とにかく、私は iOS で実行ループを調べました。自分でできる限り理解していますが、返信がどのように役立つか、つまり実際に問題を解決する方法、または問題の原因さえ理解していません。 .

誰かが何か良いアイデアを持っているなら、私はあなたの助けが大好きです!

ありがとう。

アップデート

関数の開始時と終了時のログは次のとおりです。

0 投票する
0 に答える
192 参照

c++ - Spotlight API (NSMetadataQuery) が結果を返さない

C++\Qt プロジェクトで NSMetadataQuery を操作しようとしていて、コンパイルして実行しましたが、NSMetadataQueryDidStartGatheringNotification しか取得できません。

この問題に関する多くの質問を見てきましたが、どれもうまくいきませんでした。

プロジェクトには (今のところ) 3 つのファイルがあります。

関連するコードの一部を次に示します: http://pastebin.com/g4cKYPkm

私はそれを 2 回書きました。このバージョンは、Apple のサンプル「スポットライター」から GUI に必要なコードを除いたもの (私のプロジェクトはコンソール プロジェクトです) からのコピー ペーストであり、2 回とも同じ結果が得られました。

答えの多くは、 mainThread で startQuery を実行する必要があると言っています。スレッドは 1 つしかなく、 [NSThread isMainThread] を使用して、実際に mainThread で実行されているかどうかを確認しました。

startQuery の呼び出しの直後にループを追加しました

そして、クエリが開始され、収集され、停止されておらず、結果とキューサイズの両方が0であることがわかりました。

私が間違っていることは何か分かりますか?問題をさらに分析する方法はありますか?ありがとうございました。

編集:私はQt Creatorで作業しています.XCodeで同じコードを試しましたが、うまくいきませんでした:(

0 投票する
2 に答える
1093 参照

ios - iCloud Drive ドキュメントが NSMetadataQuery の結果に含まれない

アプリのiCloudコンテナとiCloudドライブにあるユーザーのドキュメントをリストする基本的なiOS 8アプリがあります。

私の問題は、iCloud Drive (Finder → Go → iCloud Drive) に直接あるドキュメントが、メタデータ クエリの結果として含まれないことです。クエリは、アプリの iCloud コンテナーのDocumentsフォルダーにある結果のみを返します。

次のようにクエリを初期化します。

権利は次のようになります。

さらに奇妙なことに、iCloud Drive 内のいくつかのドキュメントがときどき表示されることがありますが、iCloud Drive からそれらを移動して戻すと、それらは表示されなくなります。