开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜