如何在NSMutableArray中添加来自循环的NSString

时间:2013-04-16 08:15:35

标签: ios objective-c nsstring nsmutablearray

我想在NSmutableArray中添加NSString Name,但我不知道。 我从wamp服务器的url获得5个NSString名称,我想在NSMutableArray中添加这些名称。

这是我的代码,但不起作用! :

    NSMutableArray *file;
for (int j=0; j < 5; j++) {
        NSString *fileName = [[NSString alloc]initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://192.168.1.101/janatan/filemanager.php?dir=root&file=%d&name",j]]];
        NSLog(@"%@",fileName);
        [file addObject:fileName]  //right???
    } 

2 个答案:

答案 0 :(得分:4)

您没有分配NSMutableArray

NSMutableArray *file = [[NSMutableArray alloc] initWithCapacity:5];

如果您不确定预先添加到数组的元素数量,可以使用

NSMutableArray *file = [[NSMutableArray alloc] init];

答案 1 :(得分:3)

首先,必须分配NSMutableArray

其次,必须避免使用magic numbers

接下来,应该通过替换

来提高代码的可读性
NSString *fileName = [[NSString alloc]initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://192.168.1.101/janatan/filemanager.php?dir=root&file=%d&name",j]]];
更方便的事情。此外,此处的内存已分配但从未发布。

您的代码可能如下:

const int numberOfFiles = 5;
NSMutableArray *file = [NSMutableArray array]
for(int i = 0; i < numberOfFiles; ++i){
      NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://192.168.1.101/janatan/filemanager.php?dir=root&file=%d&name", i]];
      NSString *fileName = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
      [file addObject:fileName];
 }

但是我们可以找到一些问题。 例如,如果在服务器端更改了url,则会重写代码。如果元素的数量发生了变化,那就相同了。所以找到一种避免这种依赖的方法会很好。