iOS:从委托获取实例变量值(属性)

时间:2012-02-16 19:44:16

标签: ios delegates properties

我正在开发一个包含多个视图的简单应用。 我有一个基本视图和第二个视图,在基数之后调用。 基本视图用作第二个视图的委托。

在我的第二个视图中,我想在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开发的新手,以防它不明显。

2 个答案:

答案 0 :(得分:2)

由于你遇到了定义委托协议(IMO这个好东西)的麻烦,你应该坚持你的设计决定并将属性添加到协议中,而不是寻找一个“聪明”的解决方案,使警告消失。您可以使用@property作为协议声明,如下所示:

@protocol secondViewDelegate
@property(retain) NSString* name;
@end

如果在协议中拥有该属性感觉不错,那么您应该检查您的设计决策:secondViewDelegate应该做什么,或者为什么secondView需要设置属性

答案 1 :(得分:0)

你可以简单地调用它的-name或-setName:方法,虽然会产生编译器警告,但它们都可以工作。 编辑:如果将对象强制转换为适当的类型,它甚至不会发出警告。