2012-04-26 19 views
0

構文解析されたXMLデータを含む「深い」NSMutableDictionaryと、1つのビューコントローラから別のビューコントローラに渡すことができる他の関連情報が組み込まれています。 NSMutableDictionaryは主にNSStringsを含みますが、NSStringsをさらにNSMutableDictionaryに置き換え、最終的にはカスタムオブジェクトのNSMutableArray(カレンダー用)をさらに深く追跡します。NSStringをNSStringに変換すると、EXC_BAD_ACCESSが返されます。

今、カレンダーなので、明らかに日付が関係しています。 NSXMLParserを使用して受け取って解析するXMLデータは文字列を返すので、日にちの日付を使用可能な数値に変換するのは私の仕事でした。 XMLの日付は、次の形式で入って来:「MM.DDは」私がそうするように、次のメソッドを作成しました:

- (void)createDateCodesWithString:(NSString *)string 
{ 
    NSInteger monthCode; 
    NSInteger dayCode; 
    .... 
    NSArray *dates = [string componentsSeparatedByString:@"."]; 
    monthCode = [[dates objectAtIndex:0] integerValue]; 
    dayCode = [[dates objectAtIndex:1] integerValue]; 
    .... 
    shortDay = [NSNumber numberWithInt:dayCode]; 
} 

「shortDay」のNSNumber *とIVAR、宿泊施設(非アトミックとして設定します私が作成したカスタムオブジェクトを保持します。コンソールでNSLogコマンドを実行すると、「shortDay」などのデータが深いNSMutableDictionaryに正常に格納されているように見えます。しかし、データに再度アクセスしようとすると問題にぶつかります。 NSString *に格納されたivarにアクセスすると問題は解決しますが、NSNumber *にアクセスしようとすると、コード1またはコード2のEXC_BAD_ACCESSエラーが発生します。これはNSNumberを呼び出す方法です。*

NSNumber *number = day.shortDay; 
    return [number stringValue]; 

NSArray *の日付は文字列を月と日の文字列に取り除き、その日の文字列は2文字の長さで、 '0'を含むことがあります。 6月6日?何かアドバイス?

必要に応じてより多くのコードを投稿していただきます。

+0

このようなオブジェクトの作成方法については、NSNumberクラスリファレンスを参照してください。整数を代入することはできません。あなたは警告を受けていませんでしたか? –

答えて

1

shortDayのメモリは、次にアクセスしようとする前にクリーンアップされている可能性があります。それを割り当てる場合、代わりにこれを試してみてください。

shortDay = [[NSNumber numberWithInt:dayCode] retain]; 

は、メモリが早すぎる割り当てが解除されるのを避けるために(AKAオブジェクトの所有権を取る)参照カウントを増加します。

これで問題が解決した場合は、クラスのdeallocメソッドで[shortDay release]に電話する必要があります。そのため、適切なタイミングでメモリが適切に割り当て解除されます。

+0

私はA.R.C.を使用しています。 XCode5に含まれているので、それはすべて私のためになります(間違い?)私がアクセスしようとすると、retainCountは3になります。 – achi

+0

私はそれを取り戻す、それは働いた。ありがとう!なぜあなたはNSNumberが早くクリーンアップされ、NSStringはされていないのか分かりますか?さらに、私はA.R.Cを使用しているため、短期などのリリースが必要ですか? – achi

+2

ARCが有効なプロジェクトでは、releaseとretainを使用しないでください。私はそれがとにかくコンパイルされないと思う。 –