目标C:在课堂之间进行交流

时间:2010-08-29 04:59:27

标签: objective-c iphone

我正在编写一个iPhone程序,它有一个允许用户登录的登录视图控制器。我有一个在该控制器中使用的方法,用于检查用户名和密码的身份验证。我正在使用钥匙串来存储用户名和密码,但我想知道如何在课堂外进行通信,即用户名和密码是真实的,而无需重复代码。

这可能很简单,但是已经很晚了,我的大脑已经完全油炸了......

3 个答案:

答案 0 :(得分:3)

好问题,西蒙的做法当然是合理的。

另一个想法是创建一个新的类,建模为 Singleton ,称为安全性,并将您的身份验证方法放在那里。然后,任何希望验证用户的对象都可以简单地调用安全性。

您可以在此处详细了解 Singleton 模式:http://developer.apple.com/iphone/library/documentation/cocoa/conceptual/cocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html#//apple_ref/doc/uid/TP40002974-CH6-SW6

希望这有帮助。

安德鲁

答案 1 :(得分:1)

一种方法是将用于处理存储和检查用户名/密码的代码移动到AppDelegate类中,然后在视图控制器类中,您可以执行以下操作:

MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];

// Store password
[appDelegate storePassword:foo forUsername:bar];

// Then later, or in another class...
if ([appDelegate userIsAuthenticated]) {
    // Stuff for authenticated users goes here
}

(您需要将#import "MyAppDelegate.h"添加到视图控制器的.m文件的顶部。)

答案 2 :(得分:0)

为了更好地匹配MVC范例,您应该将所有密码检查和存储代码移到视图控制器之外,并进入状态建模类。

密码模型对象并不特别需要是单例(某些应用程序可能需要多个密码等)。

当创建视图控制器和除了需要触摸密码凭证之外的任何其他对象时,将指向新密码模型对象的指针传递给消息以进行存储,验证等。这样,所有密码建模代码都将被封装并且隐藏在一个地方。