2011-04-20 216 views
0

在我的Mac iPhone模擬器(iPhone模擬器4.0)我運行我的應用程序沒有問題,但是當我將其更改爲運行iPhone模擬器4.2的另一臺Mac時,它擊碎了一個按鈕,調試器的版本(4.0和4.2)會導致潛在的崩潰? THX提前:))[iOS]應用程序崩潰

編輯

這是代碼我有疑問,可能會導致死機「因爲我在它使用一個UIPickerView代碼:

- (void)viewDidLoad { 
    ((UILabel *)[[[[[[switchCommerce subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0]).text = @"oui"; 
     ((UILabel *)[[[[[[switchCommerce subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1]).text = @"non"; 
     ((UILabel *)[[[[[[switchStationDeLavage subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0]).text = @"oui"; 
     ((UILabel *)[[[[[[switchStationDeLavage subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1]).text = @"non"; 
     [rayonDeRechercheSlider setValue:35 animated:YES]; 
     [UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:1.0]; 
     CGAffineTransform transform=CGAffineTransformMakeTranslation(0,480); 
     pickerViewTypeCarburant.transform=transform; 
     pickerViewNomStation.transform=transform; 
     [UIView commitAnimations]; 
     [super viewDidLoad]; 
     typeCarburantTextField.delegate=self; 
     nomDeStationTextField.delegate=self; 
     pickerArrayTypeCarburant=[[NSMutableArray alloc] initWithObjects:@"Sans Plomb 95",@"Gazole",@"Super Gazole",@"GNV",@"Sans Plomb 98",@"SP95-E10",@"E85",nil]; 
     pickerArrayNomStation=[[NSMutableArray alloc] initWithObjects:@"TOTAL",@"SHELL",@"ESSO",@"CARREFOUR",@"BP",@"AGIP",@"CASINO",@"LECLERC",@"AUCHAN",@"ELF",@"AVIA",@"SUPER U",nil];//added 
    } 
+0

向我們展示一些代碼。 – 2011-04-20 14:06:37

+0

嗨,張貼編輯:) – Malloc 2011-04-20 14:11:56

+0

史詩般的使用方括號。 – Stuart 2011-04-20 14:29:06

回答

1

一個潛在的問題在您的代碼是您似乎分配給您的可變陣列屬性(pickerArrayTypeCarburant & pickerArrayNomStation),而不使用self.表示法。這意味着數組將被分配而不使用retain語義(假定您的陣列的@property聲明被告知使用retain)。

這樣做的影響是,當您嘗試在代碼中稍後訪問此數組時,您會發現該數組未被保留,並且您可能會收到某種內存警告。試試這個:

self.pickerArrayTypeCarburant=[[NSMutableArray alloc] initWithObjects:@"Sans Plomb 95",@"Gazole",@"Super Gazole",@"GNV",@"Sans Plomb 98",@"SP95-E10",@"E85",nil]; 
self.pickerArrayNomStation=[[NSMutableArray alloc] initWithObjects:@"TOTAL",@"SHELL",@"ESSO",@"CARREFOUR",@"BP",@"AGIP",@"CASINO",@"LECLERC",@"AUCHAN",@"ELF",@"AVIA",@"SUPER U",nil]; 

這是很難說是否會解決你的問題,因爲我不知道被扔到什麼錯誤這樣做,不過如果是內存相關那麼這可能是罪魁禍首。可以肯定的是,您可以在樂器中運行您的應用程序,並查看是否有任何泄漏或分配不應該在哪裏。

編輯:

在回答有關性的評論,你的頭文件也許應該聲明你NSMutableArrays這樣的:

YourClass.h

@interface YourClass { 
    NSMutableArray *pickerArrayTypeCarburant; 
    NSMutableArray *pickerArrayNomStation; 
} 

@property (nonatomic, retain) NSMutableArray *pickerArrayTypeCarburant; 
@property (nonatomic, retain) NSMutableArray *pickerArrayNomStation; 


// Any method names here... 


@end 

而且在頂您的.m文件,正好在@implementation行下面:

@synthesize pickerArrayTypeCarburant, pickerArrayNomStation; 

@synthesize零件將根據您在@property上提供的信息自動爲您的屬性創建所需的存取器和增變器。在這種情況下,我已經定義了屬性應該使用保留語義,這意味着當您使用self.(即self.pickerArrayNomStation = anArray;)將值分配給您的屬性時,您分配給它的數組將自動由您的屬性保留。確保在分配給使用retain的屬性時包含self.,因爲這是告訴它使用生成的mutator方法,而不是僅僅指派給實例變量而不保留。

順便說一句,確保當你產生這種方式保留的屬性,你在dealloc方法調用[myProperty release];,和(假設你的類視圖控制器......)self.myProperty = nilviewDidUnload方法。這可確保在不再需要視圖和視圖控制器時,可以正確釋放所有保留的對象。

如果你需要關於這個東西的更多信息,Apple的文檔是你的朋友。我發現他們的編程指南在我剛開始時非常有用。我在你的回答下的評論中引用了你的指導,這是一個很好的開始。

希望這會有所幫助。

EDIT 2

不知道這是否會幫助,但我有時發現,在該分配陣列是在viewDidLoad方法的底部稍微安全一點......你在哪裏分配給您的數組屬性,將代碼更改爲:

NSMutableArray *newArrayTypeCarburant = [[NSMutableArray alloc] initWithObjects:@"Sans Plomb 95",@"Gazole",@"Super Gazole",@"GNV",@"Sans Plomb 98",@"SP95-E10",@"E85",nil]; 
NSMutableArray *newArrayNomStation = [[NSMutableArray alloc] initWithObjects:@"TOTAL",@"SHELL",@"ESSO",@"CARREFOUR",@"BP",@"AGIP",@"CASINO",@"LECLERC",@"AUCHAN",@"ELF",@"AVIA",@"SUPER U",nil]; 
self.pickerArrayTypeCarburant = newArrayTypeCarburant; 
self.pickerArrayNomStation = newArrayNomStation; 
[newArrayTypeCarburant release]; 
[newArrayNomStation release]; 
+0

我會檢查它,我告訴你會發生什麼,請保持與我的帖子uptodate :))))thx – Malloc 2011-04-20 14:59:53

+0

當我使用自我聲明它給我錯誤:錯誤:對象無法設置 - 無論是隻讀屬性還是沒有找到setter – Malloc 2011-04-20 15:04:00

+1

@Malek:我現在編輯了我的答案,以包含有關如何分配屬性的信息,以便它爲您生成setter,並使屬性在賦值時使用'retain'到它。 – Stuart 2011-04-20 15:16:38