在我的应用程序中,我使用3个类MasterViewController,DeviceViewController和BRButton。 BRButton类可以完成所有实际工作,并且其中包含用于蓝牙4.0设备的硬件委托回调。我正在尝试获取在BRButton中发生某些事情时在其他类中触发的方法。这可以在DeviceViewController中工作,但不能在MasterViewController中工作,对于IOS编程,我还是很环保的。这是一些代码片段。
我还要提到的一件事是它不会出错,只是不调用该方法。

BRButton.h

@protocol RefreshScreen
-(void) tableTimer:(NSTimer *)timer;
@end

@protocol BRButtonDelegate
@optional
-(void) bounceBack;
-(void) tableTimer:(NSTimer *)timer;
@required
-(void) buttonReady;
@end

@interface BRButton : NSObject <CBCentralManagerDelegate, CBPeripheralDelegate> {
    NSTimer *myTimer;
}

@property (nonatomic,assign) id <BRButtonDelegate> delegate;
@property (nonatomic,assign) id <RefreshScreen> testCall;


BRButton.m(在两个不同的地方,我在不同的类中调用某些东西。第一个不起作用,第二个不起作用。)

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
    ...does some work then...
        [[self testCall] tableTimer:nil];  //tableTimer is nil here because no NStimer is used to trigger from this delegate method.
        printf("New UUID, adding\r\n");

    printf("didDiscoverPeripheral\r\n");
}


- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error {
    printf("Disconnecting \r\n");
    [[self delegate] bounceBack];
}


MasterViewController.h

@interface MasterViewController : UIViewController < UITableViewDelegate, UITableViewDataSource, RefreshScreen> {
    BRButton *b;
}


MasterViewController.m(我希望在我在didDiscoverPeripheral的断点之后调用它,但是永远不会这样。)

-(void) tableTimer:(NSTimer *)timer {
    if(b.peripherals.count > 0)
    {
        [self.deviceTableView reloadData];
    }
}


DeviceViewController.h

@interface DeviceViewController : UIViewController <BRButtonDelegate> {
}
@property (strong, nonatomic) BRButton *bb;


DeviceViewController.m

- (void) bounceBack {
    [self.navigationController popViewControllerAnimated:YES];
}


如果您需要更多信息,请告诉我。

最佳答案

使用断点并确保在调用tableTimer时“ testCall”属性不为零。

另外,如果那些对象被取消分配,则应该使testCall和委托弱化而不是分配。

07-24 14:18