【发布时间】:2011-08-04 21:01:55
【问题描述】:
在 ASIFormDataRequest 之后,我从 JSON 创建一个临时 NSMutableArray *resultArray 然后将其添加到定义的 NSMutablearray *myData
-(void)viewDidLoad{
myData = [[NSMutableArray alloc] init];
//request that calls gotInfo method
}
-(void)gotInfo:(ASIFormDataRequest *)request{
NSString *responseString = [request responseString];
NSMutableArray *resultArray = [responseString yajl_JSON];
[myData addObject:resultArray];
}
-(IBAction)doSomethingWithData:(id)sender{
//something with myData
}
但是当我尝试从 gotInfo: 方法之外调用 myData 时,我会遇到错误的访问错误,并且当我在方法之外检查 myData 时,它会显示 kern_protection_failure。所以我猜在方法之外, resultArray 显然被释放了,但它也从 myData 释放,因为 myData 中的对象共享相同的内存位置? 我也试过了
-(void)gotInfo:(ASIFormDataRequest *)request{
NSString *responseString = [request responseString];
[myData addObject:[responseString yajl_JSON]];
}
如何保存 myData?
在我的头文件中:
#import <UIKit/UIKit.h>
@class ASIFormDataRequest;
@interface EventsTableController : UITableViewController <UITableViewDataSource>{
NSMutableArray *myData;
}
-(void)gotInfo:(ASIFormDataRequest *)request;
更新:
所以在 gbd 中,myData 被分配为 0x5e96560 所以我这样做了
po 0x5e96560
然后我得到 EXC_BAD_ACCESS,原因是地址为 KERN_PROTECTION_FAILURE:0x00000009
但如果我这样做了
po [[0x5e96560 objectAtIndex:0] objectForKey:@"key"]
然后我得到了价值!为什么yyyyy?
【问题讨论】:
-
可以把初始化
myData的代码贴出来吗? -
@Saphrosit:我用代码更新了我的帖子
-
由于您将对象 [responseString yajl_JSON] 添加到数组 myData 中,因此数组 myData 会将对象的保留计数增加 1,因此它可能必须处理 yajl_JSON 方法。你确定它返回的是一个 NSMutableArray 指针吗?
-
是的,responseString来自json_encode($phpArray)
标签: iphone objective-c arrays release