1

辞書内の同一のキーに対して一意の値を返すコードを次に示します。現在、私のログでは、「objects array:」は 6 (3 セット (同一のキーを持つ 2 つのオブジェクト)) であり、「dictionary:」は各セット (3 つの一意の値) から 1 つのオブジェクトの値を返します。私の「for」ステートメントでは:

for (id key in dict)
{
       self.titlesArray = [NSMutableArray arrayWithObject:dict];
       NSLog(@"titles: %@", self.titlesArray);
       self.titlesArray = [[NSMutableArray alloc] initWithObjects:[dict valueForKey:key] ,nil];
       NSLog(@"titles: %@", self.titlesArray);

}

最初のログは、3 つの一意の値とキーを出力します。2番目は、単一のキーに対して単一の値のみを出力します(これは私が望むものです..しかし、3つのキー値すべてが必要です)したがって、私の問題は、辞書から一意の値ごとにキーを取得して追加できないことです私のtitlesArrayに。

for (id key in dict) 
{
    self.titlesArray = [NSMutableArray arrayWithObject:dict];
    self.titlesArray = [[NSMutableArray alloc] initWithObjects:[dict valueForKey:key] ,nil];

コードが正しくありません。

    PFQuery *query = [PFQuery queryWithClassName:@"Images"];
    [query whereKey:@"recipientIds" equalTo:[[PFUser currentUser] objectId]];
    [query orderByDescending:@"createdAt"];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (error) {
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
        else {

            // found messages!
            self.objectsArray = objects;

            NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
            for(id obj in self.objectsArray){
                PFObject *key = [obj valueForKey:@"titleLabel"];

                if(![dict objectForKey:key]){
                    [dict setValue:key forKey:[obj valueForKey:@"titleLabel"]];
                }
            }
            for (id key in dict) {
                self.titlesArray = [NSMutableArray arrayWithObject:dict];
NSLog(@"titles: %@", self.titlesArray);
                self.titlesArray = [[NSMutableArray alloc] initWithObjects:[dict valueForKey:key] ,nil];
NSLog(@"titles: %@", self.titlesArray);
            } 
            NSLog(@"dictionary: %@", dict);
            NSLog(@"Objects array is %d", [self.objectsArray count]);

            [self.pickerView reloadComponent:0];
4

4 に答える 4

1

PFObject はどのように見えますか。その中に文字列はありますか?あなたの質問によると、辞書のキーとして PFObject を渡すことができないことはすでにわかっています。あなたのオブジェクトがこのようなものであれば

interface PFObject : NSObject

{
    NSString *keyString;
    ......
    .Some other variables
}

次に、このように使用してキーとして設定する必要があります

PFObject *key = [self.objectsArray valueForKey:@"titleLabel"];

            if(![dict objectForKey:@"titleLabel"]){
                [dict setValue:obj forKey:[key valueForKey@"titleLabel"]];
            }
于 2013-10-19T03:12:48.527 に答える
1

それはこの行で起こっていますね:

 if(![dict objectForKey:@"titleLabel"]){
            [dict setValue:obj forKey:key];
        }
    }

「obj」を値として設定していますが、問題はありませんが、PFObject である「key」を使用していますが、NSDictionary ではキーに NSString が必要です。

PFObject に使用したい NSString プロパティが含まれている場合は、それを渡すことができます。たとえば、PFObject に「name」という NSString プロパティがある場合、次のように呼び出すことができます。

if(![dict objectForKey:@"titleLabel"]) {
           [dict setValue:obj forKey:key.name];
        }
    }

関連する注意事項は、NSMutableDictionary がこのメソッドを定義するときのパラメーターの型、つまり (NSString*) です。

 - (void)setValue:(id)value forKey:(NSString *)key
于 2013-10-19T03:21:05.373 に答える
1

行に何らかのタイプエラーがあるようです

PFObject *key = [self.objectsArray valueForKey:@"titleLabel"];

そのはず

 PFObject *key = [obj valueForKey:@"titleLabel"];
于 2013-10-19T03:08:37.307 に答える