EXC_BAD_ACCESS问题

时间:2011-07-25 19:16:10

标签: objective-c cocoa-touch

我试着按照下面的代码。因为没有存储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

1 个答案:

答案 0 :(得分:1)

您不能将无符号整数视为对象;没有任何投射会使这项工作成功,[[NSArray arrayWithObjects:(id*)p count:n] retain]也会崩溃。

最后,你的内存管理是错误的。 + arrayWithData :(由于它是一个类别,应该用前缀或足够的名称命名)返回一个保留的对象。另外,请勿使用get*前缀命名方法。