通过协议在两个视图控制器之间传递数据

时间:2012-03-16 17:07:58

标签: iphone objective-c protocols

如何声明并实现一个返回视图属性的协议? 例如。我有一个名为mainView的视图,我希望它能够在另一个视图(例如customView)请求它时返回一个数组。 我正在做的是我在mainView实现文件中声明了一个协议(带有returnTheArray函数)并将customView设置为采用这个协议,但我仍然坚持这一点。我该怎么做才能使其正常工作?或者有更有效/简单/正确的方法来做到这一点?感谢。

1 个答案:

答案 0 :(得分:2)

这样的协议只是函数/方法名称,参数和返回值的声明。作为一个协议对我来说只是理由,当它被许多类实现时,我个人更喜欢在单个头protocolName.h中声明它。

每个符合协议的类都需要实现方法。对于我的承诺,这很简单。

AClass.h

@itnerface AClass:NSObject { //一些属性 } // @property语句 @end

AClass.m

#include "BClass.h"

@implementation AClass

//@synthesize statements;

- (void) aFunctionFetchingTheArray {

  BClass *bClass = [[BClass alloc] initWithSomething:kParameter];

  NSArray *anArray = [bClass returnTheArray];

  //Do something with it

}

@end

MyProtocol.h

@protocol MyProtocol 

- (NSArray *) returnTheArray;

@end

BClass.h

#include "MyProtocol.h"

@interface BClass <MyProtocol> {
// some properties in interface
}
// some @property
// some methods
@end

BClass.m

#include "BClass.h"  //No need to include MyProtocol.h here too, in this case

- (NSArray *) returnTheArray {
return [NSArray arrayWithObjects:@"A", [NSNumber numberWithtInt:1], [UIColor clearColor], somethingElse, evenMore, nil];
}

// more methods

@end

如果我遗漏或拼错了重要的内容,请更正我的意见。