1

以下の関係を持つ 2 つのエンティティがあります。

Contact <--> ContactMeta

ここで、Contact には「contactMeta」として関係の 1 つがあり、ContactMeta には「操作」として属性の 1 つがあります。

Contact エンティティで fetchRequest を起動しています。結果の型は NSDictionaryResultType です。

だから私はNSJSONSerializationを使用してシリアライズし、JSONリクエストとしてサーバーに送信している辞書の配列を取得しています。

今、「contactMeta.operation」を propertiesToFetch リストに追加しているので、辞書のキーの 1 つが「contactMeta.operation」です。

問題は、JSON リクエストで「contactMeta.operation」の代わりに「operation」をキーとして送信する必要があることです。

リスト内の各ディクショナリを反復処理し、キー「contactMeta.operation」の値として値を持つキー「操作」を追加し、「contactMeta.operation」のキー値を削除するオプションが 1 つあります。

しかし、私はこのアプローチに満足しておらず、sqlite では次のようなクエリを使用できると考えていました。

Select first_name, last_name, contactmeta as operation from contact;

コアデータで同様のことを行うことはできますか、または私がやろうとしていることを実装するためのスマートでより良い方法はありますか?

提案してください。

4

1 に答える 1

5

あなたの勘は正しかった、別の方法があります。NSExpressionDescription は、探しているものです。

    NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Contact"];
    [request setResultType:NSDictionaryResultType];
    NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"contactmeta"];
    NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
    [expressionDescription setName:@"operation"];
    [expressionDescription setExpression:keyPathExpression];
    [expressionDescription setExpressionResultType:NSUndefinedAttributeType];
    [request setPropertiesToFetch:@[@"first_name",@"last_name",expressionDescription]];
    NSError* error = nil;
    NSArray* rez = [context executeFetchRequest:request error:&error];
于 2013-02-20T09:27:06.083 に答える