Cod*_*Guy 2 iphone methods protocols ios
这是我第一次在Objective-C中使用Protocols,我遇到了麻烦:这就是我所拥有的:
我有一个ReportsReceiver.h:
@protocol ReportsReceiver
-(void)receiveData:(NSArray *)theData;
@end
Run Code Online (Sandbox Code Playgroud)
我有一个MyController.h:
@interface MyController : UIViewController<ReportsReceiver,UITableViewDelegate,UITableViewDataSource> {
}
@end
Run Code Online (Sandbox Code Playgroud)
我有一个MyController.m与实现的方法:
- (void)receiveData:(NSArray *)theData {
NSLog(@"received some data!");
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个AllUtilities.m类声明:
Protocol *receiverProtocol;
Run Code Online (Sandbox Code Playgroud)
AllUtilities.m还包含初始化协议的方法:
- (void)initProtocol {
receiverProtocol = @protocol(ReportsReceiver);
}
Run Code Online (Sandbox Code Playgroud)
然后在AllUtilities.m中我打电话:
[receiverProtocol receiveData:anArray];
Run Code Online (Sandbox Code Playgroud)
哪个应用程序崩溃了错误:
2011-01-07 11:46:27.503 TestGA[91156:207] *** NSInvocation: warning: object 0x9c28c of class 'Protocol' does not implement methodSignatureForSelector: -- trouble ahead
2011-01-07 11:46:27.504 TestGA[91156:207] *** NSInvocation: warning: object 0x9c28c of class 'Protocol' does not implement doesNotRecognizeSelector: -- abort
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?谢谢!!
您应该再次阅读Objective-C指南中有关协议的部分:)我认为您并不真正了解协议的工作原理.这就是你想要的:
// DataProducer.h
@protocol DataConsumer
- (void) handleData: (NSArray*) data;
@end
@interface DataProducer
@end
// DataProducer.m
@implementation DataProducer
- (void) generateDataAndPassTo: (id <DataConsumer>) consumer
{
NSArray *data = …;
[consumer handleData:data];
}
// SomeController.h
#import "DataProducer.h"
@interface SomeController <DataConsumer>
@end
// SomeController.m
@implementation SomeController
- (void) requestData
{
// The producer is of type DataProducer.
// Where you get it is irrelevant here.
[producer generateDataAndPassTo:self];
}
- (void) handleData: (NSArray*) data
{
NSLog(@"Got data.");
}
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2395 次 |
| 最近记录: |