2013-04-10 37 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。