我正在开发一个包含多个视图的简单应用。 我有一个基本视图和第二个视图,在基数之后调用。 基本视图用作第二个视图的委托。
在我的第二个视图中,我想在baseView中设置和检索属性的值('name')。 因为在第二个View中,委托是第二个ViewDelegate对象,所以它没有'name'方法。
baseView.h(跳过导入):
@interface baseView : UIViewController <secondViewDelegate> {
}
@property (retain) NSString *name;
@end
secondView.h(跳过导入):
@protocol secondViewDelegate;
@interface secondView : UIViewController{
}
@property (nonatomic,assign) id <secondViewDelegate> delegate;
@end
@protocol secondViewDelegate
- (void) secondViewDidFinish:(secondView *)controller;
@end
这里的常用方法是什么? 我真的需要为协议实现一个getter和setter吗?像:
@protocol secondViewDelegate
- (void) secondViewDidFinish:(secondView *)controller;
- (NSString *)getName;
- (void)setName:(NSString *)newName;
@end
或者有没有什么好方法可以实际访问baseView属性,或者至少获取实例? (这是一个好主意吗?)
我仍然是iOS开发的新手,以防它不明显。
答案 0 :(得分:2)
由于你遇到了定义委托协议(IMO这个好东西)的麻烦,你应该坚持你的设计决定并将属性添加到协议中,而不是寻找一个“聪明”的解决方案,使警告消失。您可以使用@property
作为协议声明,如下所示:
@protocol secondViewDelegate
@property(retain) NSString* name;
@end
如果在协议中拥有该属性感觉不错,那么您应该检查您的设计决策:secondViewDelegate
应该做什么,或者为什么secondView
需要设置属性
答案 1 :(得分:0)
你可以简单地调用它的-name或-setName:方法,虽然会产生编译器警告,但它们都可以工作。 编辑:如果将对象强制转换为适当的类型,它甚至不会发出警告。