EXC_BAD_ACCESS Issue
i tried to follow code below. Because not stored CoreData.
CoreData only stored BinaryData.
something NSArray convert to NSData.
this convert was Succeeded.
but, converted NSData reverse is not convert to NSArray.
NSArray convert to NSData (Sucess)
NSData convert to NSArray(failed)
I wrote a comment EXC_BAD_ACCESS line.
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;
[开发者_Go百科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
You cannot treat an unsigned integer as an object; no amount of casting will make that work and [[NSArray arrayWithObjects:(id*)p count:n] retain]
will crash, too.
Finally, the your memory management is wrong. +arrayWithData: (which should be named something with a prefix or suffice since it is a category) is returning a retained object. Also, don't name methods with a get*
prefix.
精彩评论