2011-07-25 9 views
-4

私は以下のコードに従おうとしました。 CoreDataが格納されていないためです。EXC_BAD_ACCESS問題

CoreDataのみがBinaryDataに格納されます。

NSArrayからNSDataに変換します。

この変換は成功しました。

しかし、変換されたNSData reverseはNSArrayに変換されません。

にNSArrayのNSDataに(成功事例の)に変換

NSDataの(失敗)にNSArrayに変換

私はコメントEXC_BAD_ACCESS行を書きました。

plz help me !!!

EX)

[newEntity setValue:[myArray convertToData] forKey:@"myData"]; (not problem) 

myItem.arr = [NSArray arrayWithData:[newEntity valueForKey:@"myData"]]; (seriously Problem) 

#import <Foundation/Foundation.h> 


    @interface NSArray(dataConversion) 

    - (NSData*) convertToData; 
    + (NSArray*) arrayWithData:(NSData*) data; 
    @end 

    #import "NSArray+dataConversion.h" 


     @implementation NSArray(dataConversion) 

     - (NSData*) convertToData { 
      unsigned n= [self count]; 
      NSMutableData* data = [[NSMutableData dataWithLength: sizeof(unsigned)+ 
            sizeof(id) *n] retain]; 
      unsigned* p = [data mutableBytes]; 
      *p++= n; 
      [self getObjects:(void*)p]; 
      return data; 
     } 


     + (NSArray*) arrayWithData:(NSData*) data 
     { 
      unsigned* p = (unsigned*)[data bytes]; 

      //this code occured EXC_BAD_ACCESS message. 
      unsigned n = *p++; 

      return [NSArray arrayWithObjects:(id*)p count:n]; 
     } 


     @end 

答えて

1

あなたはオブジェクトとして符号なし整数を扱うことはできません。キャスト量がなくても[[NSArray arrayWithObjects:(id*)p count:n] retain]がクラッシュします。

最後に、メモリ管理が間違っています。 + arrayWithData :(これはカテゴリなので、接頭辞または十分な名前をつけた名前にする必要があります)は、保持されているオブジェクトを返します。また、接頭辞get*という名前のメソッドを指定しないでください。

+0

@ bitmapdata.comはい、それはbbumが書いたものです... –

+0

[[NSArray arrayWithObjects:(id *)p count:n] retain]が間違っています。 私は間違ってコードを書く。今編集する。 このコードに問題がありますか?コードはこのサイトをもたらしました:http://lists.apple.com/archives/cocoa-dev/2002/Jan/msg00315.html このコードを修正していませんか? –