Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 模式观点和授权_Iphone_Delegates_Uitableview_Model View Controller - Fatal编程技术网

Iphone 模式观点和授权

Iphone 模式观点和授权,iphone,delegates,uitableview,model-view-controller,Iphone,Delegates,Uitableview,Model View Controller,目前,我正在开发一个iPhone应用程序,它向用户询问登录信息,验证这些信息,并向用户显示其信息的表视图 启动时,应用程序委托将启动一个空表视图和模式视图,以请求登录凭据。登录凭据包括一个标准用户名/密码字段和一个按钮,用于将信息发送到服务器 验证用户凭据后,我想向LoginView下的TableView发送一条消息,上面写着“嘿,用户凭据已验证,请收集此用户的所有数据并关闭视图控制器。”我查看了苹果的一些教程,特别是配方表视图示例,(使用委托添加配方)然而,我正在实施的方法从未执行过,希望有人

目前,我正在开发一个iPhone应用程序,它向用户询问登录信息,验证这些信息,并向用户显示其信息的表视图

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

验证用户凭据后,我想向LoginView下的TableView发送一条消息,上面写着“嘿,用户凭据已验证,请收集此用户的所有数据并关闭视图控制器。”我查看了苹果的一些教程,特别是配方表视图示例,(使用委托添加配方)然而,我正在实施的方法从未执行过,希望有人能对我的问题有所帮助

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
TableView.h

@interface RootViewController : UITableViewController <GatherDataDelegate>
- (void)gatherForUserName:(NSString *)userName gatherForPassword:(NSString *)password;
    NSLog(@"calling gather");
}

可能是我遗漏了一些愚蠢的事情,就像我说的,我没有很多使用委派的经验,但我看到了很多关于委派的帖子。提前感谢您的帮助并花时间阅读此文章。

看起来您做得一切都对-您创建了一个协议,实现了它,并向委派发送了一条消息……愚蠢的任务ion…您确定在创建LoginViewController后设置了它的delegate属性吗?

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

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

其次,当table view控制器加载时,它只需向数据模型询问用户的信息,数据模型本身将根据登录控制器以前的输入控制返回哪个用户的数据。tableview控制器只需要知道如何读取和显示该用户信息,其他什么都不需要


这样的设计既美观又整洁,您可以添加其他视图,而不必不断地将所有视图控制器链接在一起(这会像滚雪球一样)

您在哪里创建和设置代理?感谢您的回复,我将我的答案放在bpap的答案下面,因为它们是类似的问题。可能是另一个愚蠢的问题,但在我的应用程序代理中,我创建了LoginView控制器,并让导航控制器在ApplicationIDFinishLaunching函数中显示它。在我创建LoginViewController之后,我将委托设置为self,但它向我发出警告(myproject)AppDelegate未实现GatherDataDelegate。以这种方式在AppDelegate中显示它是否不好?好的,这就是问题所在。您在AppDelegate中将LoginViewController的委托设置为self-这意味着您将AppDelegate本身设置为委托。但根据上面的代码,您的委托实际上应该是RootViewController,因为它实现了GatherDataDelegate。感谢Bpapa的帮助,这就是我出错的地方,尽管多亏了TechZen的设计批评,我打算在我的应用程序功能中改变一两件事。好吧,从设计角度来看,你认为我创建CurrentUser类会更容易。还有这个类be由登录控制器设置,并由TableView读取。好吧,这更有意义。除了facebook,我不知道还有任何其他应用程序具有在线登录系统。将来我希望用户能够保存他们的信息,这样他们就不必每次都登录。谢谢你的提示。另一个愚蠢的问题。我接受你的建议,我知道了n为当前用户创建数据模型对象。如果my tableview在显示登录视图后已全部加载完毕,则在验证凭据后,它如何知道加载用户数据?登录视图现在是否发送一条委托消息,说“查看当前用户对象,它有一些您可能感兴趣的数据?”或我是不是搞错了。它是通过重新加载表中的数据来实现的?Bpapa的问题解决了我眼前的问题,但感谢TechZen,我将在两个视图控制器之间实现一个数据模型。
- (void)gatherForUserName:(NSString *)userName gatherForPassword:(NSString *)password;
    NSLog(@"calling gather");
}