我有一个对象incall
的类。我有一个设置它的方法和另一个运行该对象可用方法的方法。
这是我的头文件:
@interface RCTPlivo : NSObject <PlivoEndpointDelegate, CXProviderDelegate>
@property (nonatomic) PlivoIncoming *incall;
@property (nonatomic) PlivoEndpoint *endpoint;
@end
这是我的实施文件:
@implementation RCTPlivo
- (void)login {
endpoint = [[PlivoEndpoint alloc] init];
[endpoint login:plivoUser AndPassword:plivoPass];
endpoint.delegate = self;
}
- (void)triggerIncomingCall {
...
CXProvider *callkitProvider = [[CXProvider alloc] initWithConfiguration: configuration];
[callkitProvider setDelegate:self queue:nil];
...
[callkitProvider reportNewIncomingCallWithUUID:currentCall update:update completion:^(NSError * _Nullable error) {
if (error) {
NSLog(@"Error: %@", error);
}
}];
}
- (void)onIncomingCall:(PlivoIncoming *)incoming {
// setting
self.incall = incoming
}
- (void)provider:(CXProvider *)provider performAnswerCallAction:(CXAnswerCallAction *)action
{
// Here self.incall is null
[self.incall answer];
}
@end
当我在perfromAnswerCall委托self.incall
委托时,它为空。当我在onIncomingCall委托中记录它时,变量被设置。
我在这里缺少什么?
更新 添加了初始化代理并删除了ivars的代码。
答案 0 :(得分:1)
您的界面应该是:
@interface RCTPlivo : NSObject <PlivoEndpointDelegate>
@property (nonatomic, strong) PlivoIncoming *incall;
@end
您的实施应该是:
@implementation RCTPlivo
- (void)onIncomingCall:(PlivoIncoming *)incoming {
self.incall = incoming;
}
- (void)provider:(CXProvider *)provider performAnswerCallAction:(CXAnswerCallAction *)action {
[self.incall answer];
}
@end
答案 1 :(得分:0)
infall
属性未定义为strong
。因此,我们可以假设在此方法之外没有strong
对原始对象的引用,并且它已被释放。
<强>更新强>
此属性被称为委托,因此其weak
性质可以是指定行为,如果这是一个选项,则消息发送方应具有保存对象的strong
属性参考
答案 2 :(得分:0)
这种情况的一种方式是你以某种方式拥有两个独立的RCTPlivo实例。尝试在每个调用中停止调试器,并在调试器中执行:
(lldb) po self
如果一切正常,那么地址应该是相同的。