2015-06-09 127 views
0

我即將製作iPhone應用程序。 我遇到了一個問題。這段代碼錯了嗎?

NSArray *array2 = [NSArray alloc]; 
[array2 initWithObjects:@"a",@"b",@"c",@"d",nil]; 
NSMutableArray *arr3 = [NSArray ArrayWithObjects:@"e",@"f",@"g",nil]; 
NSUInteger uInt1 = [array2 count]; 
uInt1 = [arr3 count]; 
NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithArray:array2]; 

NSLog(@"count : %d", [mutableArray count]); 

這段代碼錯了嗎? 我想我對c語言很熟悉。 但很難與像 NS系列C-目標類來處理....

這是我第一次到iPhone編程..

+0

爲什麼你認爲你的代碼錯了? – Jens

+0

你想做什麼,爲什麼你認爲它不正確? – iphonic

+1

你面臨什麼問題? – Gati

回答

0
NSArray *array2 = [NSArray alloc]; 
[array2 initWithObjects:@"a",@"b",@"c",@"d",nil]; 

你應該分配的initWithObjects:array2結果,通常你甚至不從init...

NSArray *array2 = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d",nil]; 

分裂alloc或使用arrayWithObjects:方法:

NSArray *array2 = [NSArray arrayWithObjects:@"a",@"b",@"c",@"d",nil]; 

,或者使用文本語法

NSArray *array2 = @[@"a",@"b",@"c",@"d"]; 

NSMutableArray *arr3 = [NSArray ArrayWithObjects:@"e",@"f",@"g",nil]; 

不能不可變的陣列NSArray分配給可變的一個NSMutableArray,也ArrayWithObjects的情況是錯誤的。正確的是:

NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"e",@"f",@"g",nil]; 

沒什麼錯在這裏:

NSUInteger uInt1 = [array2 count]; 
uInt1 = [arr3 count]; 
NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithArray:array2]; 

NSLog(@"count : %d", [mutableArray count]); 

%d不應與NSUInteger得到真正使用。你將在64位機器上得到編譯器警告。

打印爲對象,而不是數量:

NSLog(@"count : %@", @([mutableArray count])); 
+0

對不起,我應該寫的是什麼問題:(當調試時,array1,2和3都沒有顯示正確的結果。他們指出垃圾值..我現在不能檢查,但我想明天我會從答覆中找到答案: )thx這麼多! – serendi21

1

取決於你正在嘗試做的,但在語法上應該更多的東西是這樣的:

NSArray *array1 = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d",nil]; 
NSMutableArray * array2 = [NSMutableArray arrayWithObjects:@"e",@"f",@"g",nil]; 
NSUInteger count1 = [array1 count]; 
NSUInteger count2 = [array2 count]; 
NSMutableArray * array3 = [[NSMutableArray alloc] initWithArray:array2]; 

夫婦的注意事項:

  • 雖然你可以在技術上做一個分配,然後在兩個單獨的行上的NSObject的初始化,通常你w應該像上面的第1行一起完成它們。
  • 第二行使用一個類方法來實例化NSMutableArray。在通常情況下,這些類型的方法將執行alloc & init並返回一個對象。但是在(稍微)更高級的情況下,它們可能會返回零,這意味着無法創建對象。例如,你想實例化一個AVCaptureDevice,但其中一個不存在。
  • 你不能創建一個NSArray並將其分配給一個NSMutableArray,但你可以換個方式 - NSMutableArray是NSArray的一個子類。
+0

由於您對SA非常陌生,並且您給出了可接受的答案,因此+1 – Jasper

0

A. NSArray創作

NSArray *array2 = [NSArray alloc]; 
[array2 initWithObjects:@"a",@"b",@"c",@"d",nil]; 

這裏是一個真正的錯誤:你必須尊重init…方法有返回值:

NSArray *array2 = [NSArray alloc]; 
array2 = [array2 initWithObjects:@"a",@"b",@"c",@"d",nil]; 

但正如sulthan提到的,你平時在一個聲明中做。

但是,你可以忘掉我說什麼,因爲你可以做到想你想數組文本做更容易:

NSArray *array2 = @[@"a",@"b",@"c",@"d"]; 

B. NSMutableArray創作

NSMutableArray *arr3 = [NSArray ArrayWithObjects:@"e",@"f",@"g",nil]; 

有一個bug ,編譯器應該警告你:你創建一個NSArray的實例並將它分配給對象引用NSMutableArray,什麼是子類。選項:

NSMutableArray *arr3 = [NSMutableArray ArrayWithObjects:@"e",@"f",@"g",nil]; 

NSMutableArray *arr3 = [@"e",@"f",@"g" mutableCopy]; 

C.記錄

NSLog(@"count : %d", [mutableArray count]); 

有一個bug,編譯器應該警告你:-count返回NSUInteger類型的值。這可以是一個整數或一個長,取決於體系結構。由於鏗鏘格式字符串檢查,%d是多頭的錯誤佔位符。通常的處理方式是:

NSLog(@"count : %ld", (long)[mutableArray count]);