在我的Mac iPhone模拟器(iPhone模拟器4.0)中我运行我的应用程序没有问题,但当我将其更改为另一台运行iPhone模拟器4.2的Mac时,它会在应用程序中的某个位置点击按钮,可能是调试器的版本(4.0和4.2)是潜在崩溃的原因?提前thx:))
修改
这是我怀疑它可能导致崩溃的代码'因为我在其中使用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 :(得分: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
行上提供的信息自动为您的媒体资源创建所需的访问者和变更者。在这种情况下,我已经定义了属性应该使用retain语义,这意味着当您使用self.
(即self.pickerArrayNomStation = anArray;
)为您的属性赋值时,您分配给它的数组将自动保留由您的财产。确保在分配给使用retain的属性时包含self.
,因为这是告诉它使用生成的mutator方法,而不是仅保留实例变量而不保留。
顺便说一下,确保以这种方式生成保留属性时,在[myProperty release];
方法中调用dealloc
,并且(假设您的类是视图控制器...){{ 1}}在您的self.myProperty = nil
方法中。这可确保在不再需要视图和视图控制器时正确释放任何保留的对象。
如果您需要有关此内容的更多信息,Apple的文档就是您的朋友。我在开始时发现他们的编程指南非常有用。我在你的回答中将你的评论链接起来的指南是一个很好的开始。
希望这有帮助。
编辑2
不确定这是否有帮助,但我有时发现以这种方式分配数组更安全......在您分配给数组属性的ViewDidLoad方法的底部,将代码更改为:
viewDidUnload