【问题标题】:Passing data between two view controllers via a protocol通过协议在两个视图控制器之间传递数据
【发布时间】:2012-03-16 17:07:57
【问题描述】:

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

【问题讨论】:

  • 是的。从 UIViewController 到 UITableViewController
  • 我不明白为什么你需要一个协议,如果视图控制器相互引用你可以添加一个方法。
  • meggar 是正确的。您不一定需要协议。特别是因为它只是在这两个类之间。但是,我将您的问题理解为“我如何实现协议”。这就是为什么我刚刚发布了如何实现协议的框架示例。在您的特定情况下,我不会费心定义协议。如果它真的是一个属性,那么在接口中定义它,添加 (at)property 和 (at)synthesize 语句并使用合成的 getter 方法来获取它。如果名称是 theArray,那就是 getTheArray。这就是 (at)synthesize 为您所做的。

标签: iphone objective-c protocols


【解决方案1】:

协议本身只是函数/方法名称、参数和返回值的声明。作为一个对我来说只有当它被多个类实现时才合理的协议,我个人更喜欢在单独的头文件protocolName.h中声明它。

每个符合协议的类都需要实现方法。据我了解,就这么简单。

AClass.h

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

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

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

【讨论】:

  • 值得一提的是委托方法的命名约定(BClass通过遵守的协议中的方法)。看看这个:cocoawithlove.com/2009/06/method-names-in-objective-c.html
  • initWithSomething 是什么意思?如何告诉 AClass BClass *bClass 是控制器 BClass,而不仅仅是一些空控制器?
  • 一般你应该调用init方法。万一您想将一些数据传递给您的新对象以对其进行初始化,最好在您的 init-method 中执行此操作并传递参数并相应地命名该方法。如果你想用一张火车票来初始化你的对象,那么你可以把它叫做 initWithTrainTicket。就这样。 :)(在该方法中调用 [super init|)
猜你喜欢
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
相关资源
最近更新 更多