[iOS]应用程序崩溃

问题描述:

在我的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

一个潜在的问题在您的代码是您似乎分配给您的可变阵列属性(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