2011-08-11 7 views
4

iOSプログラミングを学ぶために、私は画像を共有するiPhoneアプリケーションを開発しています。アプリケーションはWebサイトのクライアントです。iPhoneがアプリケーション全体を通してログインしているかどうかをチェック

didFinishLaunchingWithOptionsの方法では、ユーザーが既にログインしているかどうかを確認します。 ユーザーがログインしていない場合でも、アプリケーションのすべての部分が表示されますが、たとえば、プロファイルの編集、画像へのコメントなど

すべてのView Controllerでログに記録されているかどうかを共有するにはどうしたらいいですか?

答えて

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]; 

それとも、あなたはあなたがそれを初めてアクセスINITS自動シングルトンの実装を作成することができます

@implementation SomeClassSingleton 

static SomeClass* _someObject = nil; 

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

    return _someObject; 
} 

@end 
+0

お返事ありがとうございました。なぜ同期? –

+1

'@ syncrhonized'はスレッドセーフです。 iOSのようなマルチスレッド環境では、共有オブジェクトが一度に複数のスレッドによって変更されないようにする必要があります。静的オブジェクト、またはここで実装されているようなシングルトンは、1つのコピーとしてメモリに存在します。 '@synchronized'は渡したオブジェクトをロックし、スレッド間でのアクセスを「同期」するので、ロック中にアクセスしようとするスレッドは、ロックが開かれるまで待たなければなりません。これは、ロックが設定されている間、第2のスレッドが継続するのをブロックする、基本的な「ブロック」メカニズムです。 – nekno

+0

ありがとうございました! –

1

アプリケーションデリゲートのようなシングルトン、またはすべてが見ることができるモデルオブジェクト(ユーザーデータなど)の一時的な値として配置します。

、あなたのアプリケーションのデリゲートに割り当てられたBOOLプロパティを追加した場合、あなたはこのようにそれを得ることができますが:

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

myDelegate.userLoggedIn = YES; 
+0

私は初心者向けのiOS開発者です。シングルトンやモデルオブジェクトを使用したことはありません。あなたはそれを使用するためにいくつかのヒント(あなたが誰かを知っていれば記事)をくれますか?ありがとう、男! –

+0

私はあなたのために上記の答えを編集します。 –

関連する問題