2012-05-07 93 views
1

我已經試圖瞭解我的代碼2天現在怎麼了。我希望你有一個想法?NSOperation在全球排隊

我試圖創建一個NSOperationQueue作爲「全局」隊列,允許我從該viewController中的任何方法添加操作。在我嘗試在.h文件中定義隊列以使其成爲全局隊列之前,我在最初需要的方法中創建了它,並且我可以添加操作。這很好。但後來我想檢查從原始方法之外的隊列中是否有任何活動的操作,我顯然不能,因爲我在方法中聲明瞭它。所以,我想用下面的代碼來聲明其在.H:

@property (strong, nonatomic) NSOperationQueue *queue; 

和.M的頂部:

@synthesize queue; 

這是我的操作添加到隊列中的代碼。

NSInvocationOperation *doMorse = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(morse) object:nil]; 

[self.queue addOperation:doMorse]; 

問題是,當我嘗試添加操作時隊列保持空白。 (以前工作正常。)我是否宣佈隊列錯誤?順便說一下,有沒有更好的解決方案,使隊列可以通過任何方法訪問,而不是我嘗試的方法? (在相同的viewController(如果它可以從任何視圖工作,這將是真棒:-)))。

非常感謝!

+0

如果您運行的是ARC,則ivars默認爲強壯。但屬性很弱,請確保你宣佈你的財產較強或保留舊學校 –

+0

隊列'nil'也許? –

+0

我如何知道? – Linus

回答

1

您需要實際上創建您的隊列。你只申報一個實例變量的隊列存儲在

在你的構造函數(init方法),添加: self.queue = [[NSOperationQueue alloc] init]

如果之前但不工作的任何更長的時間,你可能開始打電話另一個構造。我經常犯的一個錯誤是在initWithFrame中進行設置:在我的自定義視圖中,但是然後開始使用來自nib的視圖,這意味着initWithCoder:將被調用。