2011-07-25 3 views
-4

J'ai essayé de suivre le code ci-dessous. Parce que pas CoreData stocké.EXC_BAD_ACCESS Problème

CoreData n'a stocké que BinaryData.

Quelque chose NSArray convertir en NSData.

cette conversion a été réussie.

mais converti NSData converti n'est pas converti en NSArray.

NSArray convertir en NSData (Sucess)

NSData convertir en NSArray (échec)

J'ai écrit une ligne de commentaire EXC_BAD_ACCESS.

plz aidez-moi !!!

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 

Répondre

1

Vous ne pouvez pas traiter un entier non signé comme un objet; aucune quantité de casting ne fera ce travail et [[NSArray arrayWithObjects:(id*)p count:n] retain] tombera aussi en panne.

Enfin, la gestion de votre mémoire est erronée. + arrayWithData: (qui devrait être nommé quelque chose avec un préfixe ou un suffixe puisqu'il s'agit d'une catégorie) retourne un objet retenu. En outre, ne nommez pas les méthodes avec un préfixe get*.

+0

@ bitmapdata.com, Oui, c'est ce que bbum a écrit ... –

+0

[[NSArray arrayWithObjects: (id *) p nombre: n] retain] est incorrect. je me trompe écrire un code. maintenant éditer. ce code a un problème? le code a apporté ce site.http://lists.apple.com/archives/cocoa-dev/2002/Jan/msg00315.html Pas corriger ce code? –