簡體   English   中英

UIButton操作在一段時間后可能無法正常工作(可能是在進行一些垃圾回收之后)

[英]UIButton action doesn't work after some time (probably after some garbage collection)

我有一個帶有約60個調用相同方法的按鈕的UIView。 單擊按鈕時,我通過這種方法打開不同的圖像-我使用按鈕標簽來知道調用了哪個按鈕以及要顯示哪個圖像。 像畫廊一樣思考它。

由於繪制按鈕很困難,因此我使用了Interface Builder並使用該UIView創建了XIB。 我只是將按鈕拖動到正確的位置,然后在事件TouchUpInside上將它們連接到我的方法。 我用它來將視圖添加到主視圖中:

NSArray *xibContents = [[NSBundle mainBundle] loadNibNamed:@"Tour" owner:self options:nil];
UIView *tour = [xibContents lastObject];
[self.view addSubview:tour];

到目前為止,到目前為止,效果很好。 不幸的是,該應用程序使用了一段時間后出現了一些問題。 這些按鈕仍會突出顯示(因此它們仍在這里!),但是沒有再執行任何操作。 只是亮點而沒有動作。

我不知道為什么,但是垃圾回收器似乎以某種方式破壞了UIButton目標。 為什么? 我該如何解決?

請注意,我尚未以編程方式聲明按鈕。 我認為將它們放在IB中就足夠了。

我也找不到內存警告和UIButton目標的破壞之間的聯系。 內存警告確實出現在我的應用程序中,但是大多數時候按鈕仍然可以使用。

但是它必須是垃圾收集器,因為該錯誤完全隨機出現。 無法重現此錯誤,有時會在單擊5次后發生,有時會在我的應用中花費10分鍾后發生。

您可以嘗試像這樣加載筆尖:

首先,在標題中創建IBOutlet屬性。 然后,當您創建Nib時,將UIView IBOutlet連接到Nib中的頂級視圖(所有內容都位於其中)。 然后在您的實現中,像這樣加載它:

 [[NSBundle mainBundle] loadNibNamed:@"Tour" owner:self options:nil];
 // self.view if in a view controller
 [self addSubview:self.tourView]; 

我的猜測是,可能是按鈕的指針停止工作的原因,但不是垃圾回收的原因,因為這不會發生

並進行調試,您可以嘗試如下操作:

 for (UIView* view in self.view.subviews)
     if ([view isKindOfClass:[UIButton class]])
     {
               if([self.view respondsToSelector:@selector(myIBAction:)]){
                   NSLog(@"it still sees the method");
                }

         NSLog(@"Button Rect: .2%f, .2%f, .2%f, .2%f", view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
      }

正如我在評論中提到的

這是將選擇器添加到所有按鈕的最簡單方法。

for (UIView* view in self.view.subviews)
    if ([view isKindOfClass:[UIButton class]])
    {
         //Add selector
    }

出現問題時重新設置目標,就是告訴它大聲或更堅持地執行錯誤的操作。

您必須找到此問題的原因。 運行儀器(構建→配置文件),選擇分配模板,然后啟動您的應用程序。 運行直到問題發生為止,然后按左上方的紅色錄音按鈕停止在樂器中錄音。

在左側列表中選擇分配工具,在時間線正下方的窗口中,從跳轉欄中的“統計信息”更改為“對象列表”。 現在,對於要分配,保留,釋放和釋放的每個對象都有一行。 單擊小箭頭以查看每個對象的歷史記錄。 (嚴格來說,它是針對每個內存地址的;許多對象可以在應用運行時重用同一內存地址。)您還可以按右上角的任何內容進行過濾,展開右側邊欄以獲取有關所選內容的完整堆棧跟蹤,雙擊一個條目將其與源代碼相關聯。

關於樂器有很多東西要學習。 查看文檔並在網上搜索。 但是,這肯定會告訴您正在發生的事情,以便您可以推斷發生原因或未發生原因的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM