2013-04-16 61 views
0

我想在NSmutableArray中添加NSString名稱,但我不知道這一點。 我從wamp服務器的url中獲得5個NSString名稱,我想在NSMutableArray中添加這些名稱。如何從NSMutableArray循環添加NSString

這是我的代碼,但不工作! :

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??? 
    } 
+3

alloc] init];你的NSMutableArray。 – Bonnie

+0

你想添加5次相同的文件名嗎? – jkk

回答

4

如果你不能確定元素的數量被添加到陣列事前你不分配NSMutableArray

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

,您可以使用

NSMutableArray *file = [[NSMutableArray alloc] init]; 
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,您將重寫代碼。如果元素的數量改變了,它是一樣的。所以找到一種方法來避免這種依賴是很好的。

相關問題