0

Objective-C コードに次のような構造体があります >

typedef struct {
__unsafe_unretained NSString *string1;
__unsafe_unretained NSString *string2;
__unsafe_unretained NSString *string3;
__unsafe_unretained NSString *string4;
__unsafe_unretained NSString *string5;
.
.
.
__unsafe_unretained NSString *string10;

} MyStruct;

私のモデルクラスでは、これらの構造体を宣言された配列に格納します

@property (nonatomic, strong) NSMutableArray *myStructArray;

このように実行時に.mファイルにこれを構築します

NSMutableArray *myTempArray = [NSMutableArray array];
for (NSDictionary *jsonDict in jsonArray)
{
 MyStruct stringsStruct = parseWithDictionary(jsonDict);
 [myTempArray addObject:[NSValue value:&stringsStruct withObjCType:@encode(MyStruct)]];
}
myObject.myStructArray = myTempArray;

問題は、内部オブジェクトの解析/構築後にこれにアクセスしようとすると、既に割り当てが解除されており、エラーが発生したことです。

-[CFURL length]: message sent to deallocated instance 

ちなみに、後でプロパティにアクセスする方法は次のとおりです。

 MyStruct myStruct; 
[[myObject.myStructArray objectAtIndex:someIndex] getValue:&myStruct];
NSLog(@"%@",myStruct.string1); // << bam! crash

これを修正するにはどうすればよいですか? 私がそれを終えるまで、オブジェクトオブジェクトが割り当てを解除せずにそのまま残るようにする方法はありますか? 私はARCを使用しているため、__unsafe_unretainedで削除できません。

4

1 に答える 1