我试着按照下面的代码。因为没有存储CoreData。
CoreData仅存储了BinaryData。
NSArray转换为NSData的东西。
此转换成功。
但是,转换后的NSData reverse不会转换为NSArray。
NSArray转换为NSData(成功)
NSData转换为NSArray(失败)
我写了一条评论EXC_BAD_ACCESS行。
请帮助我!!!
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
答案 0 :(得分:1)
您不能将无符号整数视为对象;没有任何投射会使这项工作成功,[[NSArray arrayWithObjects:(id*)p count:n] retain]
也会崩溃。
最后,你的内存管理是错误的。 + arrayWithData :(由于它是一个类别,应该用前缀或足够的名称命名)返回一个保留的对象。另外,请勿使用get*
前缀命名方法。