Iphone 未调用委托方法
作为一名初学者,我发现很难理解学员,因此我将尽力提问: 我想让Connection.m成为Controller.h的代表。 在我的控制器里。我有Iphone 未调用委托方法,iphone,objective-c,xcode,delegates,Iphone,Objective C,Xcode,Delegates,作为一名初学者,我发现很难理解学员,因此我将尽力提问: 我想让Connection.m成为Controller.h的代表。 在我的控制器里。我有 @protocol HeliControllerDelegate <NSObject> @optional - (void) measurementUpdated:(NSNumber *) measurement; - (void) didDiscoverCharacteristic; // neh @end @interface H
@protocol HeliControllerDelegate <NSObject>
@optional
- (void) measurementUpdated:(NSNumber *) measurement;
- (void) didDiscoverCharacteristic; // neh
@end
@interface HeliController : UIViewController <CBPeripheralDelegate>
@property (nonatomic, assign) id<HeliControllerDelegate> delegate;
@end
界面失准前。在Controller.m中,我用
- (void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{
NSLog(@"Did discover characteristic for service %@", [service.peripheral UUID]);
for(CBCharacteristic *c in [service characteristics]){
if([[c UUID] isEqual:HeliController.throttleCharacteristicUUID]){
NSLog(@"Found throttle characteristic");
self.throttleCharacteristic = c;
[self.delegate didDiscoverCharacteristic];
}
}
}
在委托文件Connection.h中,我以
@interface Connection : UIViewController <CBCentralManagerDelegate, ControllerDelegate> {
}
@接口连接:UIViewController{
}
因此,我可以使用Controller.h协议中的方法,但是即使程序执行了didDiscoveryCharacteristic调用,在Connection.m中的方法实现上也没有发生任何事情
非常感谢您在这方面提供的所有帮助。您是否在Controoler.h文件中声明了委托 @interface Controller { id (ControllerDelegate) controllerDelegate; } @property (nonatomic, assign) id (ControllerDelegate) controllerDelegate; @接口控制器 { id(ControllerDelegate)ControllerDelegate; } @属性(非原子,赋值)id(ControllerDelegate)ControllerDelegate; 对ControllerDelegate使用括号而不是() 并将其添加到下面的.m文件中 @synthesize controllerDelegate
@在Controller.m
self.delegate中合成controllerDelegate。调用didiscovercharacteristic
时,委托很可能为零。您可以使用调试器或NSLog()检查这一点。确保将控制器对象的委托属性设置为正确的连接实例
ControllerDelegate之后的NSObject没有意义
在Controoler类中声明委托属性
你仍然错过了一些东西:
您必须告诉“Controller”的实例哪个实例是它的委托,这意味着您必须创建一个属性(称之为“delegate”或类似于“myDelegate”的东西),并将其设置为指向使用该协议的类的实例(在本例中为连接)
它应适用于UITable的代理(例如,协议UITableViewDelegate)
您需要告诉UITableView谁(哪个实例)可以“听到”调用tableView:didSelectRowatineXpath:和其他委托方法
设置指向它的表实例属性:
yourTable.delegate=anInstanceOfADelegateClass 请提供更多的代码。self.delegate设置在哪里?在IB中还是代码中的某个地方?self.delegate设置为什么类型的对象?您是否实际实现了DidDiscoveryWithCharacteristic?怎么做?您将[self.delegate.discovercharacteristic]确切地称为什么时候。您是否在Connection.m中实现了didiscovercharacteristic
?2.您是否将连接的实例分配给控制器的委托属性?我仍然不明白。我需要一些代码的例子,可以告诉我尽可能容易,从我的代码派生出如何做到这一点。看看这篇文章:我尝试了,但没有理解它。事情变得有点混乱,因为控制器是CBPeripheral的委托,而连接应该是控制器的委托。我如何将它指向实例?代码片段将是greatHelicopter*helico=[[helicholder alloc]init]autorelease];代表=自我;(其中self我假设您实现委托方法和初始化对象的地方)它不喜欢具有相同名称的iVar和属性,因此我删除iVar并使用@synthetic controllerDelegate=\u controllerDelegate
进行合成。但是我现在如何将连接设置为代理呢?如果(self.profilePhotoDelegate!=nil&&[self.delegate respondsToSelector:@selector(didDiscoverCharacteristic)]{[self.delegate didDiscoverCharacteristic];}并且在您的Connection.h文件中为Controller*Controller声明instant;和in.m file controller.delegate=self;在.m文件中实现DidDiscoveryCharacteristic方法-(void)DidDiscoveryCharacteristic{NSLog(@“DidDiscoveryCharacteristic”);}
@synthesize controllerDelegate