2012-07-10 47 views
1

我嘗試使用這種方法來獲取所有子視圖,但是當我運行應用程序,我有一個消息發送到釋放實例錯誤iphone - Objective-C的「消息發送到釋放實例

subviewsArray = self.view.subviews; 
for (int i=0; i <subviewsArray.count; i++) { 
    UIView *subview = [subviewsArray objectAtIndex:i]; 
    if (subview.tag >= 0) { 
     [subview removeFromSuperview]; 
    } 
} 

在我。 .H

@property (nonatomic, strong) NSArray *subviewsArray; 
+0

@Pfitz你聽說過屬性? – guitarflow 2012-07-10 13:15:20

+0

@guitarflow NSArray沒有房產數量... – Pfitz 2012-07-10 13:16:03

+0

@Pfitz,對不起,認爲點運算符僅用於屬性。我的錯。 – guitarflow 2012-07-10 13:19:40

回答

6

更改您的循環代碼如下:

for (int i=subviewsArray.count - 1; i >= 0; --i) { 
    UIView *subview = [subviewsArray objectAtIndex:i]; 
    if (subview.tag >= 0) { 
     [subview removeFromSuperview]; 
    } 
} 

你得到這個問題的原因是因爲,當你的循環從0前進到10(假設是最後一個)視圖時,你開始從父視圖中移除它們,所以計數也會改變,因此剩餘視圖的索引也會改變。

最後你最終試圖刪除一個視圖併發送一條消息removeFromSuperview,它已經被解除分配,所有這些都是因爲索引的改變。 最好逆轉,最後一個索引要先。

我很驚訝,爲什麼你沒有得到索引超出限制的例外。

不只是在這裏,一般來說,當你遍歷基於索引的集合並嘗試刪除元素時,你將永遠面對這個問題。

1

試試這個:

for(UIView *temp in self.view.subviews) 
{ 
    [temp removeFromSuperview]; 
} 

或者這樣:

[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

希望這會有所幫助。

乾杯!

+0

我嘗試你的方法,但我仍然有問題。 [MyViewControllerExample視圖]:發送到釋放實例的消息0x7268870 – 2012-07-10 13:51:29

+0

那麼你最好的機會是與殭屍工具。確保您在模擬器上運行您的應用程序,因爲該儀器在設備上不可用。讓步驟進入崩潰狀態,看看樂器告訴你什麼。也許有更多的信息,我們可以找到解決方案。 – George 2012-07-10 13:57:55

+0

我不能使用模擬器,因爲我需要連接傳感器的心臟,使用iPhone進行測試!謝謝你的幫助 ! – 2012-07-10 14:01:41

1
self.subviewsArray = self.view.subviews; 
for (int i=0; i <self.subviewsArray.count - 1; i++) { 
    UIView *subview = [self.subviewsArray objectAtIndex:i]; 
    if (subview.tag >= 0) { 
     [subview removeFromSuperview]; 
    } 
} 
+0

' George 2012-07-10 14:04:07

1

首先,雖然也許ARC是導致它,但也許簡化爲循環會解決這個問題

for (UIView *subview in self.subviews) 
{ 

} 
2

更改您的循環代碼看起來像這樣:

subviewsArray = self.view.subviews; 
for (int i=0; i <subviewsArray.count - 1; i++) { 
    UIView *subview = [subviewsArray objectAtIndex:i]; 
    if (subview.tag >= 0) { 
     [subview removeFromSuperview]; 
    } 
} 
相關問題