1

私は XCode でのコーディングが初めてで、情報を保存するために多くのことを試みましたが、うまくいきません。私はグーグルで検索しましたが、まだ何も見つかりませんでした。

classNames という名前の変更可能な配列を使用して、テキスト フィールド (classField) から情報を保存しようとしましたが、配列に格納されていません。

別の問題があります。iOS 5.1 の XCode を使用していて、iOS 6.1 の Xcode にアップグレードしましたが、「接続が中断されました」というエラーが表示され、ボタンや機能が動作しませんが、iOS の XCode では動作します。 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!!!!";
   }

}
4

2 に答える 2

4

問題は、配列が NSUserDefaults から出てきたとき、それが変更可能な配列ではないことです。入れたものが NSMutableArray だったとしても、出てくるのは普通の NSArray です。mutableCopyその配列を変更可能にするには、その配列で使用する必要があります。これで、そこに保存してから、NSUserDefaults に戻すことができます。

于 2013-04-10T15:54:59.523 に答える
1

このコードは機能しません。defaultsメソッド内で宣言しaddClass:てから、メソッドからアクセスしようとしてviewDidLoadいますが、これはできません。viewDidLoadlikeの先頭に一行追加

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

さらにサポートが必要な場合は、発生しているエラーに関する詳細情報が必要です。

于 2013-04-10T15:53:32.490 に答える