我创建了一个类NetCalculator
,我在按下按钮时调用它。该方法计算网络得到2 NSString
s并返回一个id
对象(“网络”对象或“UIAlertView”。然后我检查哪个对象是我提供的数据。当我使用时显示2-3个警报后,UIAlertView
应用程序崩溃了。
任何想法为什么会这样?在终端上,它不会显示任何错误,只是一些随机的十六进制。
-(IBAction)calculate:(id)sender {
id result;
Network *network = [[Network alloc]init];
NetCalculator *netCalculated = [[NetCalculator alloc] init];
result = [netCalculated calculateNetworkWithIP:ipLabel.text andSubnet:subnetLabel.text];
if([result isKindOfClass:[Network class]]){
network = result;
NSLog(@"network %@",network.networkIP);
}
else if([result isKindOfClass:[UIAlertView class]]) {
UIAlertView *alert;
alert = result;
[alert show];
}
};
答案 0 :(得分:0)
你的代码对我来说很奇怪。您的方法calculateNetworkWithIP
可能会返回Network
结果或UIAlertView
结果。我不会遵循这样的方法。
如果问题依赖于记忆,你应该向我们展示这种方法的实施方法。
无论如何,我会提出一些更改(以下代码不考虑ARC或非ARC代码)。特别是,我会修改calculateNetworkWithIP
以返回Network
结果。如果出现问题并且将其作为参数传递,则会填充错误。
- (Network*) calculateNetworkWithIP:(NSString *)ip subnet:(NSString*)subnet error:(NSError**)error
如果一切正常,结果将是Network
,因此打印或在某处重复使用。否则,将返回NSError
并基于该创建并显示警报视图。
所以,这里有伪代码。
NetCalculator *netCalculated = [[NetCalculator alloc] init];
NSError* error = nil;
Network* networkResult = [netCalculated calculateNetworkWithIP:ipLabel.text subnet:subnetLabel.text error:&error];
if(error != nil) {
// create and show an alert view with the error you received
} else {
// all ok so, for example, save the result in a instance variable
}
要采用类似方法,您可以查看why is "error:&error" used here (objective-c)。