iPhone检查用户是否在整个应用程序中登录

时间:2011-08-11 00:37:04

标签: iphone ios

为了学习iOS编程,我正在开发一个用于共享图像的iPhone应用程序。该应用程序是网站的客户端。

在方法didFinishLaunchingWithOptions中,我检查用户是否已登录。 如果用户没有登录,他仍然可以看到应用程序的所有部分,但是例如他不会看到用于编辑个人资料,评论图像等的选项按钮。

如何在所有视图控制器中共享已记录/未记录状态?

2 个答案:

答案 0 :(得分:5)

更新:如果今天提出这个建议,我会说使用共享实例:

@interface SomeClass: NSObject 
{
    +(SomeClass *)shared;
}

@implementation SomeClass
{
    +(SomeClass *)shared {
        static SomeClass *shared;
        static dispatch_once_t onceToken;

        dispatch_once(&onceToken, ^{
            shared = [SomeClass new];
        });

        return shared;
    }
}

然后在首次使用时为您自动实例化,并在整个应用中提供:

[[SomeClass shared] doSomething];

您可以使用单例 - 对象的全局共享实例。

@interface SomeClassSingleton : NSObject {

}

+(SomeClass*)sharedSomeClass;
+(void)setSharedSomeClass:(SomeClass*)someObject;

@end

@implementation SomeClassSingleton 

static SomeClass* _someObject = nil;

+(SomeClass*)sharedSomeClass
{
    return _someObject;
}

+(void)setSharedSomeClass:(SomeClass*)someObject 
{
    @syncrhonized(self)
    {
        _someObject = someObject;
    }
}

@end

然后,当您需要在另一个源文件中访问您的对象时,您可以在其他标题中导入单例的头文件,就像您对任何其他引用一样。

创建一个单身人士:

SomeClass* someObject = [[SomeClass alloc] init];

[SomeClassSingleton setSharedSomeClass:someObject]; // write to save your singleton

使用/阅读单身人士:

[[SomeClass sharedSomeClass] someSharedClassMessage];
// OR
SomeClass* someObject = [SomeClass sharedSomeClass];

或者,您可以创建一个单例实现,在您第一次访问它时自动执行:

@implementation SomeClassSingleton 

static SomeClass* _someObject = nil;

+(SomeClass*)sharedSomeClass
{
    @synchronized(self) {
        if (_someObject == nil) {
            _someObject = [[SomeClass alloc] init];
        }
    }       

    return _someObject;
}

@end

答案 1 :(得分:1)

将它放在像应用程序委托一样的单例中,或者作为模型对象中的瞬态值(如用户数据),一切都可以看到。

如果将已分配的BOOL属性添加到应用程序委托,则可以这样执行:

myApplicationDelegate *myDelegate = (myApplicationDelegate*)[[UIApplication sharedApplication] delegate];

myDelegate.userLoggedIn = YES;