2

崩潰時,應用程序我有一個手勢識別從故事板拉,它是工作的罰款和花花公子......GestureRecognizers模擬內存警告

當我模擬內存不足的警告時除外。在這一點上,它與錯誤崩潰:

[UISwipeGestureRecognizer retain]: message sent to deallocated instance 0x8627330 

得到它不會崩潰,我所要做的就是設置手勢識別器作爲一個強大的性能和viewDidLoad中註釋掉自動生成設置爲nil:

//[self setSwipeGestureRecognizer:nil]; 

我得到了這個解決方案隨機,我希望有人能解釋這是怎麼回事?

+0

這很奇怪,因爲它通常會刪除當前活動視圖以外的視圖。這聽起來像一個奇怪的問題,但你如何創建你的觀點? 'pushViewController'或'presentViewController'?有時候人們在轉換到新視圖時嘗試輕微的手(例如抓取視圖控制器的視圖,但忽視視圖控制器本身),我很容易想到這可能會導致問題。您可能想要在所有viewDidUnload語句中插入NSLog語句(或調試程序斷點),並確保知道發生了什麼。 – Rob

+0

我們可以通過更多的代碼來獲得更多的幫助。我假設你的滑動手勢是在'viewDidLoad'中創建的?我假設你開始刷卡時會出現這個錯誤?也許你也可以分享你的滑動處理程序。 – Rob

+0

將視圖控制器拖出故事板,然後將手勢識別器從故事板拖到視圖控制器上。我最初沒有將它們設置爲Outlet propertys,但確實將它們設置爲IBAction didSwipe。除了低內存警告的崩潰之外,它工作正常。我必須做的是將它們設置爲Outlet propertys,然後註釋掉[self setSwipeGestureRecognizer:nil],以免它崩潰。奇怪的確如此。 – yroc

回答

5

迷人。當你第一次發佈這篇文章時,我假設你的代碼存在一些問題,但考慮到你的澄清評論,我決定親自嘗試一下。我遇到了同樣的行爲。

具體來說,我在界面生成器中創建一個手勢識別器,並將其鏈接到合適的IBAction,並確認它工作正常,即使我推到另一個視圖控制器並從其中彈出。但是,如果我在該輔助視圖控制器中模擬內存警告,立即返回到原始視圖控制器後,我會收到與您相同的崩潰。

它很容易補救。看起來你有一個辦法,或者你可以簡單地繞過Interface Builder的全部,並在代碼創建自己的手勢識別器,你不會有這樣的問題,例如,

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Do any additional setup after loading the view. 

    UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; 
    [self.view addGestureRecognizer:recognizer]; 
    // [recognizer release]; // uncomment in non-ARC project 
} 

如果手動創建它像這樣,模擬內存警告後,您不會在返回視圖時發生崩潰。這就是你的解決方案。

幸運的是,它似乎已經在下一個版本的Xcode和iOS的測試版中得到了補救。