2017-05-08 104 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