我有一个JSON响应,我将其转换为看起来像这样的NSDictionary
response {
cid = 30;
female = {
id = 24;
"img_url" = "/static/images/upload/24";
};
male = {
id = 26;
"img_url" = "/static/images/upload/26";
};
}
然后我将cid代码插入到NSString变量中,如下所示:
cid = [response objectForKey:@"cid"];
后来在另一种方法中,我尝试在ASIFormDataRequest中使用cid
[request setPostValue:cid forKey:@"cid"];
但是这会导致程序崩溃。如果我在此setPostValue:cid语句之前放置cid = @"7"
(例如),一切正常,所以我知道请求的功能很好。同样,如果我NSLog(@"%@",cid);
也有效。
我相信我的问题是identical to this one,但没有人就如何解决问题给出具体答案。
有什么想法吗?
编辑1
没有崩溃日志。 Xcode只在底栏中给我这条消息:
**编辑2 **
以下是我使用调试器打印的一些图像。我不知道我是否已经正确地做到了这一点。
以下是我如何将响应数据插入CID。 CID是在头文件中声明的NSString,其中包含整个@property(非原子,保留)位。
编辑3
如果我打印
NSLog(@"%@", cid);
在发布cid值之前,我收到EXC_BAC ACCESS错误
答案 0 :(得分:3)
CID是头文件中声明的NSString,包含整个@property(非原子,保留)位。
即使您已将其声明为保留属性,也不会将其用作属性。使用:
cid = [number stringValue];
您直接将对象分配给cid
,后者是后备实例变量,从而绕过将保留该对象的属性设置器。这意味着只要相应的自动释放池耗尽,cid
可能不再指向有效对象。
如果您对一个应该在自动释放池排水管中存活的对象感兴趣,那么您应该拥有它。使用retain属性,这意味着调用属性setter,例如:
self.cid = [number stringValue];
这将保留分配给[number stringValue]
属性的cid
,如果您的程序中的其他内容在内存管理方面都是正确的,那么您将能够使用self.cid
程序的其他部分,如:
后来在另一种方法中,我尝试在ASIFormDataRequest中使用cid
对于记录,NSString
属性通常是复制而不是保留,以防止在为属性分配可变字符串时产生副作用。
答案 1 :(得分:-1)
当你拿这样的cid cid = [response objectForKey:@“cid”];然后它返回一个autorelease对象。当方法返回时它将被释放。所以尝试使用alloc。
if(cid != nil)
[cid release];
cid = [[NSString alloc] initWithString:[response objectForKey:@"cid"]];
然后
[request setPostValue:cid forKey:@"cid"];
如果这不能解决您的问题,请在此处发布。