2017-05-08 145 views
-1

我想初始化一個NSMutableArray取決於如果存在NSUserDefaults或不使用和if/else語句。NSMutableArray初始化後未知

if ([[NSUserDefaults standardUserDefaults] arrayForKey:@"customers"] == nil) { 
    NSMutableArray *customers = [NSMutableArray arrayWithCapacity:10]; 
} else { 
    NSMutableArray *customers = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"customers"]mutableCopy]; 
} 

Customer *c = [[Customer alloc]init]; 

c.fName = self.fnameTextField.text; 
c.lName = self.lnameTextField.text; 
c.username = self.usernameTextField.text; 
c.balance = [self.depositTextField.text floatValue]; 

[customers addObject:c]; 

[[NSUserDefaults standardUserDefaults] setObject:customers forKey:@"customers"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

當試圖將一個對象添加到數組中,我得到「未知的接收器‘的客戶。’」我不知道爲什麼我不能夠使用數組。

回答

3

嘗試宣告客戶陣列以外的if語句

NSMutableArray *customers; 
if ([[NSUserDefaults standardUserDefaults] arrayForKey:@"customers"] == nil) { 
    customers = [NSMutableArray arrayWithCapacity:10]; 
} else { 
    customers = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"customers"]mutableCopy]; 
} 
2

我敢肯定你寫它這樣,

NSMutableArray *customers; 

if ([[NSUserDefaults standardUserDefaults] arrayForKey:@"customers"] == nil) { 
    NSMutableArray *customers = [NSMutableArray arrayWithCapacity:10]; 
} else { 
    NSMutableArray *customers = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"customers"]mutableCopy]; 
} 

那麼,什麼是錯在這裏?

請注意,如果和其他人創建自己的作用域,那麼你聲明的變量if和else是新變量,而不是來自外部作用域的變量。如果你想使用的客戶來自外部範圍,像這樣做,

NSMutableArray *customers; 

if ([[NSUserDefaults standardUserDefaults] arrayForKey:@"customers"] == nil) { 
    customers = [NSMutableArray arrayWithCapacity:10]; 
} else { 
    customers = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"customers"] mutableCopy]; 
} 

現在,客戶內部if和else塊是已宣佈的if/else塊外相同的變量。

+0

加'1我很確定' –

+0

那麼你可以從代碼中看到它。如果沒有在其他區域外宣佈它,則他將無法使用來自外部的客戶對象。 – Sandeep

+0

我不這麼認爲,未知的接收器意味着它沒有在任何地方聲明,這是一個編譯錯誤,而不是一個運行時錯誤 – Aris