2010-01-26 53 views
1

嘿,我一直在与这个问题争斗了一段时间。也许在多线程知识方面我缺少一些东西,但是这里发生了什么。当我创建一个nsoperation队列时,分配的任何变量在“[request startSynchronous]”之后被清除;“代码行。以下是我在谈论:ASIHTTPRequest在同步模式下吞噬我的NSOperation变量

@implementation imageLoadOperation 
@synthesize object; 

-(id)initWithObject:(NSMutableArray *)receivedObject 
{ 
... 
object = receivedObject; 
... 
} 
- (void)main { 
... 
//send request 
printf("retreiving photo info from server\n"); 

NSURL *url = [NSURL URLWithString:[siteUrl stringByAppendingString:@"/connect.php"]]; 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
[request setPostValue:@"lookAtPhoto" forKey:@"purpose"]; 
[request setRequestCookies: [ASIHTTPRequest sessionCookies]]; 

的对象仍然存在这里

[请求startSynchronous]

然后对象消失在这里!

我确信这与原则理解上的差距有关,但我已经重新安排了几天的代码,但没有成功。

...

回答

2

噢,天哪,我不能相信。我没有以正确的方式设置对象来触发财产保留。 > self.object

+0

什么?我不明白这个解决方案,但我认为它对我有用。你能详细说明一下吗? – IQpierce 2010-05-25 18:56:15

+0

好吧,这很奇怪,我遇到了类似的问题,当我做了相当于: [object retain];在initWithObject中使用 。但是我不明白为什么这是必要的,或者当我已经有了(非原子的,保留)变量的属性定义时有什么区别。难道它不应该保留在我的课堂上吗?如果是这样,为什么我不得不第二次保留它? – IQpierce 2010-05-25 19:00:48

+0

IQpierce,在回答你的问题时,上面的代码不会调用合成的存取器,这会为你执行保留。 此: '对象= receivedObject;' 应该是: 'self.object = receivedObject;' 或许更清晰(尽管这显然是同样的事情): '[自我的setObject:receivedObject] ;' 希望有所帮助! – paulbailey 2010-12-04 16:27:44