2012-06-15 131 views
2

我想將NSOperation對象放到NSOperationQueue中。但似乎我誤解了如何正確地初始化一個NSInvocationOperation(一個爲我的目的而定製的子類,因爲我想在操作隊列中執行一個現有的方法)。以下是我想要的:NSInvocationOperation init從類方法返回nil調用實例方法

OnlineServiceManager * sm = [[OnlineServiceManager alloc] initWithAsset:asset andViewController:viewController]; 
NSInvocationOperation * operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(pushAsset) object:sm]; 
[queue addOperation:operation]; 

本節在一個循環內運行,該循環提供了要在操作中推送的新資產。當我調試這些行時,結果是操作無效,表明無法找到選擇器。選擇在這個類的一個實例方法,與此簽名:

- (void)pushAsset 

這節在一個類的方法還經營 - 我的意思是調用類,並指示它推向所有資產。

查找了所有可以找到與本案相關的文檔後,我並沒有看到我做錯了什麼。

回答

1

self是類對象,推送資源是實例方法,可能是問題所在。如果您將推送資產更改爲類方法會發生什麼?

+0

是的!這確實能夠使操作正常返回。根據我的理解,它並不適合我的應用程序的體系結構,但我想我會拿我能得到的。我會將此標記爲已回答,儘管我看到我的手術似乎在被呼叫後死亡... :-P –

+0

很高興能爲您提供一些服務!可悲的是,這不是一個很好的幫助。 – griotspeak

1

您無法在類對象上調用實例方法。如果你想讓-pushAsset繼續成爲一個實例方法,那麼你必須給NSOperation一個實例來調用它(並且該實例必須在操作運行時仍然存在)。你想執行-pushAsset操作的對象是什麼?這是應該用作目標參數的內容。

+0

我希望sm實例執行操作。如果我理解你是對的,我應該做的目標是:sm並將nil傳遞給對象?但是,當這個類的方法完成並將隊列返回給我的appdelegate時,它會一直存在嗎?試一試! –

+0

只需跟進:是的,從我的類方法中,我可以像我說的那樣調用一個實例方法。我的錯誤是將實例添加爲對象參數,而不是目標。乾杯! –