-1

セルがクリックされるたびに新しい値を取得する NSString があります。この値を NSMutableArray に追加したいのですが、次の [NSMutableArray addObject:NSString] を試しましたが、これにより NSMutableArray の最初のインデックス値に文字列が追加されます。次のセルをクリックすると、以前に保存された値が置き換えられます。すべての値を保存したい。どうすればそれができますか?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{


 UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];

NSIndexPath *tableSelection = [listingSet indexPathForSelectedRow];

if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
    cell.accessoryType = UITableViewCellAccessoryNone;

    [SelectedFiles removeObject:ID];
    NSLog(@"++++++Titlesss %@",SelectedFiles);



    [listingSet deselectRowAtIndexPath:tableSelection animated:YES];
} else { 

    cell.accessoryType = UITableViewCellAccessoryCheckmark;

          ID = [NSString stringWithFormat:@"%@",[[ParsedData valueForKey:@"ID"]objectAtIndex:indexPath.row]];

                   [SelectedFiles insertObject:ID atIndex:0];
    NSLog(@"%@",ID);
        NSLog(@"%@",SelectedFiles);







            [listingSet deselectRowAtIndexPath:tableSelection animated:YES];
}

}

これはうまくいかないようです。

編集:データが配列の最初のインデックスに保存されていることをどこかで読んだので、データを保存するたびに配列のインデックスパスをインクリメントする必要がありますが、方法がわかりません。

4

3 に答える 3

2

毎回新しい配列を作成しているようです。あなたはそれをすべきではありません。配列をView Controllerのプロパティにしてみてください。

@property (nonatomic, strong) NSMutableArray *stringElements;

ビュー コントローラの init メソッドで:

self.stringElements = [@[] mutableCopy];

セルがタップされると、次のようになります。

NSString *ID = [NSString stringWithFormat:@"%@", [[ParsedData 
valueForKey:@"ID"]objectAtIndex:indexPath.row]];
[self.stringElements addObject: ID];
于 2013-05-24T10:50:04.997 に答える
1
NSMutableArray *FileID = [[NSMutableArray alloc]init];

または使用

   NSMutableArray *FileID = [[NSMutableArray alloc]initWithCapacity:3];

スコープ外でそれを宣言します。この行を初期化し、配列に新しい有効なメモリを提供し、実行するたびに配列を作成します。したがって、追加されたオブジェクトは常に、上記のこの行から形成された新しい配列の最初の位置に残ります。

解決策として、この行を宣言された位置から移動するだけです。それをinitまたはviewdidLoad またはviewWillAppearメソッドに入れれば、それだけです。

addObject:メソッドはオブジェクトを次の利用可能な位置に追加するNSMutableArrayので、これで十分です

インスタンス変数を作る

@interface ATTDownloadPage ()
{
    NSMutableArray * FileID;
}

- (void)viewDidLoad
{
    NSMutableArray *FileID = [[NSMutableArray alloc]initWithCapacity:3];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *ID = [NSString stringWithFormat:@"%@", [[ParsedData valueForKey:@"ID"]objectAtIndex:indexPath.row]];
    [FileID addObject:ID];
}

あなたのコードから編集

    [SelectedFiles insertObject:ID atIndex:0];

問題を引き起こします.この行は常にインデックス0のオブジェクトを置き換えるため、配列に値が追加されません 上記のコードの代わりにこれを試してください

 NSMutableArray *tempArray =[[NSMutableArray alloc]initWithCapacity:3];
        [tempArray addObject:ID];
        [tempArray addObjectsFromArray:SelectedFiles];
        SelectedFiles =[NSMutableArray arrayWithArray:tempArray];
于 2013-05-24T10:51:20.607 に答える
0

この行では、毎回新しい配列を作成しています。

NSMutableArray *FileID = [[NSMutableArray alloc]init];
于 2013-05-24T10:50:55.313 に答える