1

バックエンド サーバー (解析) に格納された @"titleLabel" のキー値を持つオブジェクト (画像) の配列があります。私がやろうとしているのは、pickerView にタイトルのリストを表示することですが、キーが一致する @"titleLabels" のグループごとに 1 つのタイトルのみを表示したいと考えています。例: titleLabel キー: 'Spring Break' を持つ 5 つのオブジェクト (画像) がある場合、タイトル 'Spring Break' の 1 つのインスタンスのみを表示し、5 つすべてを表示したくはありません。私が書いたコードは、それを解決するための私の最高のアマチュアショットですが、「タイトル配列カウント」の NSLog は値 1 を返し、値をログに記録すると、すべてのタイトルが再び取得されます。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    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 {
           NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
        for(id obj in self.objectsArray){
            PFObject *key = [self.objectsArray valueForKey:@"titleLabel"];
            if(![dict objectForKey:key]){
                [dict setValue:obj forKey:key];
            }
        }
        for (id key in dict) {
        NSLog(@"key: %@, value: %@ \n", key, [dict objectForKey:key]);
        NSLog(@"Objects array is %d", [self.objectsArray count]);
        NSLog(@"Titles array is %d", [self.titlesArray count]);
        }
        [self.pickerView reloadComponent:0];
        }
    }]; 

そして、ここで別のコントローラーでキーを定義します。

 PFObject *image = [PFObject objectWithClassName:@"Images"];
        [image setObject:self.releaseDate forKey:@"releaseDate"];
        [image setObject:file forKey:@"file"];
        [image setObject:fileType forKey:@"fileType"];
        [image setObject:title forKey:@"titleLabel"];
        [image setObject:deadline forKey:@"deadline"];
        [image setObject:self.recipients forKey:@"recipientIds"];
        [image setObject:[[PFUser currentUser] objectId] forKey:@"senderId"];
        [image setObject:[[PFUser currentUser] username] forKey:@"senderName"];
        [image saveInBackground];
4

1 に答える 1

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

if(object != [self.objectsArray valueForKey:@"titleLabel"]){
      self.titlesArray = [self.titlesArray arrayByAddingObject:object];

}

オブジェクトが割り当てたものと等しいかどうかを確認しています。また、NSMutableArray を使用する必要がありますが、気にしないのであれば、私も気にしません。:) そうは言っても、elseループは次のようになるはずです

    self.objectsArray = objects;

    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    for(id obj in self.objectsArray){
        PFObject *key = [self.objectsArray valueForKey:@"titleLabel"];
        if(![dict objectForKey:key]){
            [dict setValue:obj forKey:key];
        }
    }
    for (id key in dict) {
        NSLog(@"key: %@, value: %@ \n", key, [dict objectForKey:key]);
    }
于 2013-10-17T00:19:46.237 に答える