2013-04-10 41 views
1

我在编码XCode新和我试图保存信息,但它不工作。我GOOGLE了,但我仍然没有发现任何东西。问题得到NSUserdefaults

我拿了一个名为classNames的可变数组,并尝试保存来自文本字段(classField)的信息,但它并未在数组中存储。

我有另一个问题:我使用iOS 5.1的XCode,我升级到iOS 6.1的Xcode,但它给了我一个错误,说“连接中断”,并没有任何按钮或功能的工作,但它的工作原理与Xcode有iOS 5.1 我需要帮助,谢谢。

#import "ViewController.h" 

    @interface ViewController() 

    @end 

    @implementation ViewController 
    @synthesize orignalClass; 
    @synthesize otherClassName; 
    @synthesize editClassLabel; 
    @synthesize displayLabel; 
    @synthesize doSomethingButton; 
    @synthesize classField; 
    @synthesize testField; 
    @synthesize classFieldFireTheme; 
    @synthesize testFieldFireTheme; 

    - (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

     _classNames = [[NSMutableArray alloc] init]; 
     _classNames = [defaults objectForKey:@"classNames"]; 
     //NSLog(@" %@", [defaults objectForKey:@"classNames"]); 


    } 


- (void)viewDidUnload 
{ 
    [self setDoSomethingButton:nil]; 
    [self setClassField:nil]; 
    [self setTestField:nil]; 
    [self setClassFieldFireTheme:nil]; 
    [self setTestFieldFireTheme:nil]; 
    [self setDisplayLabel:nil]; 
    [self setOrignalClass:nil]; 
    [self setEditClassLabel:nil]; 
    [self setOtherClassName:nil]; 
    [self setTestClass:nil]; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

- (IBAction)classtextFieldDoneEdtiting:(id)sender { 
    [sender resignFirstResponder]; 
} 
- (IBAction)testClassTextFieldDoneEdtiting:(id)sender { 
    [sender resignFirstResponder]; 
} 
- (IBAction)TestTextFieldDoneEdtiting:(id)sender { 
    [sender resignFirstResponder]; 
} 
- (IBAction)ChangeClassTextFieldDoneEdtiting:(id)sender { 
    [sender resignFirstResponder]; 
} 
- (IBAction)ChangeClassToTextFieldDoneEdtiting:(id)sender { 
    [sender resignFirstResponder]; 
} 

- (IBAction)addClass:(id)sender { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    _classNames = [defaults objectForKey:@"classNames"]; 
    _classSize = [_classNames count]; 
    NSLog(@" %d", [_classNames count]); 

    if(_classSize <=9){ 

     [_classNames insertObject: classField.text atIndex: [_classNames count]]; 
     NSLog(@"ClassNames#2::: %@", _classNames); 
     NSLog(@"textfieldvalue::: %@", classField.text); 
     [defaults setObject:_classNames forKey:@"classNames"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 

     NSLog(@" %d", [_classNames count]); 
     NSLog(@"ClassNames#3::: %@", _classNames); 

    }else{ 
     displayLabel.text = @"You exceeded the limit of classes being stores!!!!"; 
    } 

} 
+0

Xcode目前在4.6.x版本,你可能不在版本5.1。 – 2013-04-10 15:50:07

+1

你的意思是iOS版本6.1? XCode是4.6.x – Kal 2013-04-10 15:50:37

+0

错字...原谅他...他的意思是** ios ** – 2013-04-10 15:50:38

回答

1

此代码无法正常工作。您在addClass:方法中声明了defaults,然后尝试从viewDidLoad方法访问它,这是您不能做到的。添加一行的viewDidLoad顶部像

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

如果您需要更多的帮助,我们需要了解你得到错误的信息。

+0

当我在viewDidLoad函数上面有一行时,它给了我一个错误:初始化器元素不是编译时常量 – user2266844 2013-04-10 16:21:45

+0

该行需要在函数内添加,而不是在它之上。 – bdesham 2013-04-10 16:24:21

+0

我这样做了,但它没有改变任何东西: - (void)viewDidLoad { NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; [super viewDidLoad]; – user2266844 2013-04-12 15:13:44

4

问题是,当一个数组出现NSUserDefaults时,它不是一个可变数组。即使你输入的是一个NSMutableArray,出来的是一个普通的NSArray。您需要在该阵列上使用mutableCopy以使其变为可变。现在你可以存储它,然后把它放回NSUserDefaults。