0

私は現在、iPhoneアプリの一部を作成して、基本的に既存のアップルのメモ帳のように機能するセルのリスト(テーブルビュー内)を作成しています。

セルの名前が配列内の文字列の名前になるようにしようとしています。これは私が現在行っていることです。

@interface ViewController ()
{
NSMutableArray *cameraArray;
NSMutableArray *notesArray;
NSMutableArray *voiceArray;
}
@end

@implementation ViewController
//@synthesize myTableView;
- (void)viewDidLoad
{
[super viewDidLoad];

NSUserDefaults *ud=[NSUserDefaults standardUserDefaults];
//[ud setObject:@"Archer" forKey:@"char1class"];
[ud synchronize];
NSString *key1;//[ud stringForKey:@"Key1"];
NSString *key2; //[ud stringForKey:@"Key1"];
NSString *key3; //[ud stringForKey:@"Key1"];

if([ud stringForKey:@"Key1"] == nil){
    key1 = @"Open Camera Slot";
}else{
    key1 = [ud stringForKey:@"key1"];
}

if([ud stringForKey:@"Key2"] == nil){
    key2 = @"Open Camera Slot";
}else{
    key2 = [ud stringForKey:@"key2"];
}

if([ud stringForKey:@"Key3"] == nil){
    key3 = @"Open Camera Slot";
}else{
    key3 = [ud stringForKey:@"key3"];
}

cameraArray = [[NSMutableArray alloc]initWithObjects:key1, key2, key3, nil];


}

//tableview datasource delegate methods
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return cameraArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath{


CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];


if(cell == nil){
    cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault     reuseIdentifier:@"Cell"];
}

NSEnumerator *enumerator = [cameraArray objectEnumerator];
id anObject;
NSString *cellName = nil;
while (anObject = [enumerator nextObject]) {
   cellName = anObject;
}
//static NSString *cellName = [cameraArray.objectAtIndex];
cell.textLabel.text = [NSString stringWithFormat:cellName];
return cell;

}

したがって、基本的にはNSUserDefaultsのキーからcameraArrayに文字列を作成しています(テスト目的でこれを行っているだけで、文字列は後でユーザーが入力します)

私が立ち往生しているのは、列挙子が配列をうまく通過することですが、tableViewのすべてのセルで最後の値(3番目の値)のみを使用します。

したがって、「最初」、「2番目」、「3番目」の3つの文字列がある場合、3つのセルすべてが「3番目」と表示されます。

これを修正するにはどうすればよいですか?

4

1 に答える 1

0

このコードにはいくつかの問題があります。'rdelmar'は彼のコメントに基本的な答えを投稿しました。私は学習演習としていくつかのことを歩くと思いました。

ここでは、列挙子を使用して配列の値を調べています。もっと簡単な方法があります。これはコードには必要ないことに注意してください。私は将来の参考のためにこれを指摘しています。

列挙子、anObject、cellName、およびwhileループを次のように置き換えます。

for (NSString *cellName in cameraArray) {
    // Do something with cellName
}

これは、NSStringオブジェクトの配列のすべての値をウォークスルーするためのはるかに簡単な方法です。配列に異なるタイプのオブジェクトが含まれている場合は、NSStringを適切なタイプに置き換えます。

次は、stringWithFormat:を使用して組み合わせた新しい文字列を作成する方法です。このような場合、どちらも必要ありません。投稿したコードでは、cellNameはすでにNSString参照です。次のように直接割り当てます。

cell.textLabel.text = cellName;

新しいNSStringオブジェクトを作成する必要はありません。また、実際に文字列形式を使用している場合にのみ、文字列形式を使用する必要があります。

お役に立てば幸いです。

于 2012-10-12T03:03:48.733 に答える