6

こんにちは、アプリに CoreSpotlight を実装しようとしています。

インデックス作成時に毎回これを実行する必要がありますか?それとも、アプリを初めてインストールするときに 1 回実行するだけで十分ですか? アプリが削除された場合、再度インデックスを作成する必要がありますか?

私が使用しているコードは次のとおりです。

- (void)spotLightIndexing {

    NSString *path = [[NSBundle mainBundle] pathForResource:
                      @"aDetailed" ofType:@"plist"];

    NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:path];
    NSArray *plistArray = [plistDict allKeys];

    for (id key in plistDict) {

        CSSearchableItemAttributeSet* attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage];

        // Set properties that describe attributes of the item such as title, description, and image.

        attributeSet.title = key;
        attributeSet.contentDescription = [plistDict objectForKey:key];

//*************************************

 attributeSet.keywords = plistArray; // Another Q: do i need this????

//**************************************  

        // Create an attribute set for an item

        UIImage *image = [UIImage imageNamed:@"icon.png"];
        NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];
        attributeSet.thumbnailData = imageData;

        // Create a searchable item, specifying its ID, associated domain, and the attribute set you created earlier.

        CSSearchableItem *item;
        NSString *identifier = [NSString stringWithFormat:@"%@",attributeSet.title];

        item = [[CSSearchableItem alloc] initWithUniqueIdentifier:identifier domainIdentifier:@"com.example.apple_sample.theapp.search" attributeSet:attributeSet];

        // Index the item.

        [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler: ^(NSError * __nullable error) {
                        if (!error)
           NSLog(@"Search item indexed");
                       else {
                            NSLog(@"******************* E R R O R *********************");


        }];

    }
}

ありがとうございました

4

1 に答える 1

3

指定されたとおりに索引付けされています。spotLightIndexingしたがって、メソッドを入れるdidFinishLaunchingWithOptionsと、もちろんブール値を設定しない限り、起動ごとに自然にアイテムにインデックスが付けられます。アプリが削除されると、NSUserDefault の値がゼロになるため、再度インデックスが作成されます。そのため、ここで注釈が付けられているように、バッチ更新またはその他の方法を介してインデックスを追加/変更/更新することを提供しています

Web ではなくローカルの plist から入力するため、自分で更新を行うか、インデックス メンテナンス アプリの拡張機能を作成する必要があります。

このトピックに関する WWDC ビデオを見ると、ドメイン識別子を使用して「グループ」によってドメインを簡単に更新または削除できることがわかります。出典良い時計です。

キーワードに関しては、ドキュメントが iOS9 API を完全にサポートするまでわかりません。しかし、ここで Apple が公に提供しているものを読むだけでも、考慮すべき注意事項があります。

重要: 結果のランキングを上げるために、アプリのコンテンツを過度にインデックス化したり、無関係なキーワードや属性を追加したりしないようにしてください。iOS は検索結果に対するユーザー エンゲージメントのレベルを測定するため、ユーザーが役に立たないと思った項目はすぐに特定され、最終的に結果に表示されなくなる可能性があります。

これは、新しい検索機能の概要の後にあります。そして、その理由を次のように述べています。

複数の検索 API を組み合わせると、複数の場所からアイテムをインデックスに登録できます。ユーザーが検索結果にアイテムを重複して表示しないようにするには、アイテム ID を適切にリンクする必要があります。アイテム ID がリンクされていることを確認するには、検索可能なアイテムの uniqueIdentifier プロパティと、NSUserActivity オブジェクトの contentAttributes プロパティ内の relatedUniqueIdentifier プロパティで同じ値を使用できます。

つまり、クエリを行っている人だけでなく、アプリのすべてのNSUserActivityユーザーに適用できるため、意図したとおりに組み込むことができ、同じ検索で複数回入力できるとします。したがって、Apples の提案に基づいて、キーワードが既に = uniqueIdentifier である例に基づいて、特にそうでない限り、キーワードを使用しないようにしてください。

個人的には、私はすでにこれを自分のアプリに実装して気に入っていますが、実際に新しい更新をプッシュして再インストールする必要があるルートとは対照的に、ほぼ瞬時にバッチ更新を行う Web マークアップを使用しています。インデックスを更新/削除します。

于 2015-07-14T22:57:07.143 に答える