2014-10-08 35 views
1

經與一些代碼有點問題,運行其各自的行動之後返回上面列出的錯誤:NSArrayM的setObject:atIndex:]:對象不能是零

- (IBAction)uploadData:(id)sender { 

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

[uploadArray addObject:@"hire.csv"]; 
[uploadArray addObject:@"equipment.csv"]; 
[uploadArray addObject:@"signature.png"]; 

NSString * docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]; 

NSString * proof1 = [docPath stringByAppendingPathComponent:@"proof1.png"]; 

if([[NSFileManager defaultManager] fileExistsAtPath: proof1]) 
{ 
    [uploadArray addObject:@"proof1.png"]; 
} 

NSString * proof2 = [docPath stringByAppendingPathComponent:@"proof2.png"]; 

if([[NSFileManager defaultManager] fileExistsAtPath: proof2]) 
{ 
    [uploadArray addObject:@"proof2.png"]; 
} 

NSString * proof3 = [docPath stringByAppendingPathComponent:@"proof3.png"]; 

if([[NSFileManager defaultManager] fileExistsAtPath: proof3]) 
{ 
    [uploadArray addObject:@"proof3.png"]; 
} 

int arrayCount = [uploadArray count]; 
int i = 0; 

NSString *arrayString; 

for (i = 0; i < arrayCount; i++) 
{ 
    uploadArray[i] = arrayString; 

    if(arrayString != nil) 
    { 
    NSString * uploadString = [docPath stringByAppendingPathComponent:arrayString]; 
    [self upload:uploadString ftpUrl:@"ftp.xxxxxxxx.com/xx/xx" ftpUsr:@"xxx" ftpPass:@"xxx"]; 
    } 

    NSLog(uploadArray[i]); 

} 

} 

現在,如果我在禁用一切for循環,除了NSLog()之外,我沒有收到任何錯誤,並返回數組中正確的對象列表。

這對我來說,表明沒有一個對象應該返回零,當然?

任何人都可以幫助我發現我做錯了什麼嗎? (可能相當多,因爲我很新的東西)

+1

arrayString = uploadArray [i];而不是uploadArray [i] = arrayString; – kabarga 2014-10-08 09:23:07

+0

好吧,顯然刪除字符串「arrayString」,並使用uploadArray [i]直接解決了這個問題。任何人都可以解釋爲什麼這是? – Joe 2014-10-08 09:24:19

+0

查看上面的評論。你根本沒有設置arrayString。它在你的代碼中始終是零。 – kabarga 2014-10-08 09:27:31

回答

0

由於你的錯誤明確stats,你正在添加一個零對象的數組,這是不允許的。

在下面的代碼中你還沒有分配任何東西給arrayString使其成爲零。然後你嘗試將它添加到你的數組中。

NSString *arrayString; 

for (i = 0; i < arrayCount; i++) 
{ 
    uploadArray[i] = arrayString; 

從你的代碼看起來你嘗試添加的每一個元素構成的陣列到您的字符串。你這樣做是錯誤的。你需要一個NSMutableString並做類似的事情:

[arrayString appendString: uploadArray[i]]; 
+0

正是(我正在寫幾乎相同的答案)。不要忘了uploadArray [i] = arrayString;'編譯爲'[uploadArray setObject:arrayString atIndex:i];' – Szu 2014-10-08 09:32:40

+0

感謝您的輸入。這不是代碼要達到的目的,而是字符串意味着要在for循環之外初始化,並由數組的連續部分替換,直到數組完成(我只是以錯誤的順序輸入行)。我之所以這麼做的原因是因爲數組的每個部分後來都被用來發送FTP上傳請求,並且我無法在後臺線程上成功完成多個上傳。我認爲(錯誤地)運行一個如上所述的循環可能已經解決了這個問題 – Joe 2014-10-09 13:37:17

相關問題