2010-01-26 36 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