模态视图和委派

时间:2010-03-03 19:16:25

标签: iphone delegates uitableview model-view-controller

目前,我正在开发一款iPhone应用程序,要求用户提供登录信息,验证此信息并向用户显示其信息的表格视图。

启动时,应用程序委托会启动一个空表视图以及模式视图,以请求登录凭据。登录凭据包括标准用户名/密码字段和用于将信息发送到服务器的按钮。

当用户凭据经过验证后,我想向LoginView下面的TableView发送一条消息,说明'嘿,用户凭据已经过验证,请你收集该用户的所有数据并关闭视图控制器。 “我查看了Apple的一些教程,特别是Recipe Table View示例,(使用委托添加配方)但是我正在实现的方法永远不会被执行,并希望有人可以解释我的问题。

LoginViewController.h

@protocol GatherDataDelegate;

@interface LoginViewController : UIViewController {
    //lots of ivars
    id <GatherDataDelegate> delegate;

    //more ivars
}
//other properties
@property (nonatomic, assign) id <GatherDataDelegate> delegate;
@end

@protocol GatherDataDelegate <NSObject>
- (void)gatherForUserName:(NSString *)userName gatherForPassword:(NSString *)password;
@end

LoginViewController.m

else if ([dataString isEqualToString:@"Credentials Verified"]){
        [self.delegate gatherForUserName:username gatherForPassword:password]
    }

TableView.h

@interface RootViewController : UITableViewController <GatherDataDelegate>

// ivar和属性

TableView.h

- (void)gatherForUserName:(NSString *)userName gatherForPassword:(NSString *)password;
    NSLog(@"calling gather");
}

我可能缺少一些愚蠢的东西,就像我说的那样,我没有很多使用授权的经验,但我看到了很多关于它的帖子。感谢您提前提供的任何帮助,并花时间阅读本文。

2 个答案:

答案 0 :(得分:1)

看起来你做的一切都正确 - 你创建了一个协议,实现了它,并向委托发送了一条消息...愚蠢的问题......你确定在创建后设置了LoginViewController的委托属性吗?

答案 1 :(得分:0)

您尝试在两个视图控制器之间传递数据,这是不好的做法。相反,您需要两个视图都与之通信的数据模型对象。

首先,登录视图控制器将在数据模型中查询相应的登录信息。如果它检出,数据模型将该用户设置为数据模型中的当前用户,以便任何将来的数据提取返回该用户的数据。

其次,当表视图控制器加载时,它只是向数据模型询问用户的信息,数据模型本身将根据登录控制器的先前输入控制它返回的用户数据。 tableview控制器只需要知道如何读取和显示该用户信息,没有别的。

这样的设计很漂亮,你可以添加其他视图,而不必逐步将所有视图控制器连接在一起(这将会滚雪球。)