gpt4 book ai didi

ios - [iOS]应用程序崩溃

转载 作者:行者123 更新时间:2023-11-29 05:05:02 25 4
gpt4 key购买 nike

在我的 Mac iPhone 模拟器(iPhone 模拟器 4.0)中,我运行我的应用程序没有问题,但是当我将其更改为另一台运行 iPhone 模拟器 4.2 的 Mac 时,它会在应用程序中某处单击按钮时崩溃,调试器的版本是否可以(4.0 和 4.2)是潜在崩溃的原因吗?提前谢谢:))

编辑

这是我怀疑它可能会导致崩溃的代码,因为我在其中使用了 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
}

最佳答案

代码中的一个潜在问题是,您似乎在不使用 self 的情况下分配给可变数组属性(pickerArrayTypeCarburantpickerArrayNomStation)。 符号。这意味着数组的分配不使用 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];

很难判断这是否能解决您的问题,因为我不知道抛出了什么错误,但是如果它与内存相关,那么这可能是罪魁祸首。

可以肯定的是,您可以在 Instruments 中运行您的应用程序,看看是否存在任何不应该出现的泄漏或分配。

编辑:

为了回应您有关属性的评论,您的头文件可能应该像这样声明您的 NSMutableArrays:

你的类.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; >) 您分配给它的数组将自动由您的属性保留。确保在分配给使用保留的属性时包含 self.,因为这告诉它使用生成的 mutator 方法,而不是仅分配给实例变量而不保留。

顺便说一句,请确保当您以这种方式生成保留属性时,您在 dealloc 方法中调用 [myProperty release]; ,并且(假设您的类是一个 View Controller ...) viewDidUnload 方法中的 self.myProperty = nil 。这可以确保当不再需要 View 和 View Controller 时,可以正确释放所有保留的对象。

如果您需要有关此内容的更多信息,Apple 的文档是您的 friend 。当我刚开始时,我发现他们的编程指南非常有帮助。我在您的答案下的评论中链接到您的指南是一个很好的开始。

希望这对您有所帮助。

编辑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];

关于ios - [iOS]应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5731601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com