[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
}
一个潜在的问题在您的代码是您似乎分配给您的可变阵列属性(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 = nil
在viewDidUnload
方法。这可确保在不再需要视图和视图控制器时,可以正确释放所有保留的对象。
如果你需要关于这个东西的更多信息,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];
向我们展示一些代码。 – 2011-04-20 14:06:37
嗨,张贴编辑:) – Malloc 2011-04-20 14:11:56
史诗般的使用方括号。 – Stuart 2011-04-20 14:29:06