-1

私はここで奇妙な振る舞いをしています。XCode 4 for iOS 6 (Iphone 4s) init-section で、ファイルからデータを読み取りたい。

NSString *rawData = [[NSString alloc] initWithContentsOfFile:filePathLib encoding:NSUTF8StringEncoding error:NULL];
NSArray      *zeilen = [rawData componentsSeparatedByString:@";"];
NSLog(@"Check1 \n%@\n%@",rawData, zeilen);

OK、LogItem は、正しいデータが読み取られたことを示しています。

今、私はif条件を持っています:

if ([zeilen count]==4){
        A      = [zeilen objectAtIndex:0];
        B      = [zeilen objectAtIndex:1];
        C      = [zeilen objectAtIndex:2];
        D      =[[zeilen objectAtIndex:3] intValue];
        NSLog(@"Check2 \n%@\n%@ - %@ - %@ - %@ - %d",rawData, zeilen, A, B, C, D);
} else {
        A = @"A0";
        B = @"B0";
        C = @"C0";
        D = 3;
}

今、私はこのプログラムを実行します。最初の分岐が使用された場合、プログラムはクラッシュします。2 番目の分岐が使用された場合、プログラムは完全に実行されます。ブレークポイントを使用すると、次のことがわかります。

NSString * 0x20063bf0 @"A123" (正しい値)

B、C、Dも正解

後で、クラッシュの前の行:

ファイル読み取りブランチ:

A、B、C は利用できません。D が正解です。

デフォルト、ブランチ:

A、B、C、D が正解です。

変数は、他の場所で操作されたり、削除されたりすることはありません。

問題がどこにあるのか、誰にも分かりますか?

私の仮定:配列「zeilen」にはNSString値が含まれていないため、何らかの形で削除されています。しかし、私はこの理論を本当に信じていません。なぜなら、最初は要素が正しくて利用可能であり、後で削除されるからです。

何か案が?

4

1 に答える 1

0

解決しました:

交換:

A      = [zeilen objectAtIndex:0];

A      = [[NSString alloc] stringWithFormat:@"%@",[zeilen objectAtIndex:0]];

メモリが割り当てられなかったため、失われました。

于 2013-01-28T09:19:14.920 に答える