问题:app点支付按钮,跳到支付宝web页面,程序进入后台,程序卡死,支付完成或取消支付时,程序crash。
报错:-[__NSCFType invalidate]: unrecognized selector sent to instance 0x18894a30,错误原因是对已经销毁的对象,发送了消息,程序访问不到对象。
我集成了保利视频,发生错误的代码
- (void)initPloyVideo
{
PolyvSettings *polyvSettings = [[PolyvSettings alloc] init];
[polyvSettings initVideoSettings:@"ylzOkbgQcn" Readtoken:@"AAiK2jiX0t-BAnX4n6CrX-xV0TfqPUML" Writetoken:@"ZDYlp4fGF8g100D-TYug02Z14idkcelP" UserId:@"00018093b1"];
}
这样的话,polyvSettings是局部变量,出了initPloyViedeo方法,polyvSettings为nil。再次进入程序时,向polyvSettings发消息,就是向已经释放了得内存发消息,程序crash。
改错之后的代码:
//先加一个成员变量,再AppDelegate里加成员变量,相当于整个工程的全局变量,程序销毁,polyvSettings才为nil,程序不销毁,polyvSettings不为nil;
@interface AppDelegate : UIResponder <MiPushSDKDelegate,UIApplicationDelegate>
{
PolyvSettings *polyvSettings;
}
- (void)initPloyVideo
{
polyvSettings = [[PolyvSettings alloc] init];
[polyvSettings initVideoSettings:@"ylzOkbgQcn" Readtoken:@"AAiK2jiX0t-BAnX4n6CrX-xV0TfqPUML" Writetoken:@"ZDYlp4fGF8g100D-TYug02Z14idkcelP" UserId:@"00018093b1"];
}
这样的话,程序从后台回来,还可以对polyvSettings发送消息,执行方法,程序完美运行。