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 中所有单元格的最后一个值(第三个值)。

所以如果有三个字符串,“第一”“第二”和“第三”所有三个单元格都说“第三”

我该如何解决?

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 回答