2012-02-03 22 views
0

AppDelegateNSNumberにアクセスする2つのviewControllersがあります。そのうちの1人はそれを見ることができ、もう1人は見ることができません。私はこれで完全に混乱しています。iOSプロパティが 'AppDelegate *'タイプのオブジェクトに見つかりません

問題のあるコードにはこのコードが含まれています。

AppDelegate *dataStore = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
dataStore.downHUD = [NSNumber numberWithFloat:(float)progress]; 

これはこれです。最初と

AppDelegate *dataStore = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
dataStore.downHUD = [NSNumber numberWithFloat:(float)0]; 

の.mファイル内の両方の輸入AppDelegateを私は

プロパティ 'downHUD' タイプのオブジェクトに見つからないで終わる 'AppDelegate *'

1。 何が間違っているのを見るのに役立つ人ですか?

多くのコードを誤ってAppDelegateにコピーして貼り付けたため、修正されました。壊れたリンクがありますか?

+0

import "AppDelegate.h";) – Alkimake

+0

'@ end'があなたのAppDelegate.hファイルにあり、"ゴミ箱 "がなく、その前のステートメントが'; '必要に応じて –

+0

@Hot Licksそれはすべての順序です。 Alkimakeはどこにでも輸入されています。まだ立ち往生。なぜそれがいつの日に働いているのか理解できないのですか? – Jorgen

答えて

7

クラスにそのようなプロパティが存在しない可能性があります。あなたはこのようにして

@synthesize downHUD; 

を持っている必要があり、実装の宣言の下、あなたのAppDelegate.mで

@property (nonatomic, retain) NSNumber* downHUD; 

を持っている必要があり、インタフェース宣言の下にAppDelegate.hで

あなたはアクセサ(ゲッターを定義しますsetter)を使用して、downHUDというインスタンス変数にアクセスします。このアクセサは一般公開されており、実行することができます

dataStore.downHUD = ... 

これはエラーである可能性があります。しかし、AppDelegateコードがないと、何が起こっているのかを理解することは難しいです。

希望します。

編集:

それはアプリケーションデリゲート内のデータにアクセスするための良い戦略です。その他の場合は

SingletonModel* model = [SingletonModel sharedInstance]; 
NSNumber* n = model.downHUD; 

SingletonModel* model = [SingletonModel sharedInstance]; 
model.downHUD = ... 

は、あなたのモデルを読み込むには:

@interface SingletonModel : NSObject { 
    NSNumber* downHUD_; 
} 

+ (id)sharedInstance; 

@property (nonatomic, retain) NSNumber* downHUD; 

@end 

#import "SingletonModel.h" 

@implementation SingletonModel 

@synthesize downHUD = downHUD_; 

static SingletonModel *sharedInstance = nil; 

+ (SingletonModel *)sharedInstance { 
    if (sharedInstance == nil) { 
     sharedInstance = [[super allocWithZone:NULL] init]; 
    } 

    return sharedInstance; 
} 

- (id)init 
{ 
    self = [super init]; 

    if (self) { 

    } 

    return self; 
} 

-(void)dealloc 
{ 
    [super dealloc]; 
} 

+ (id)allocWithZone:(NSZone*)zone { 
    return [[self sharedInstance] retain]; 
} 

- (id)copyWithZone:(NSZone *)zone { 
    return self; 
} 

- (id)retain { 
    return self; 
} 

- (NSUInteger)retainCount { 
    return NSUIntegerMax; 
} 

- (oneway void)release { 

} 

- (id)autorelease { 
    return self; 
} 

@end 

モデルを設定するには:私はあなたが2 singletons-appdelegates-and-top-level.html

編集のようなシングルトンを使用することをお勧めinfo iphone-code-snippet-the-singleton-patternおよびsingleton-classes。シングルトンについては、アップルのドキュメントCocoa Fundamentals GuideSingletonにあります。

+0

私は '.property(copy、readwrite)NSNumber * downHUD;'を.hに入れて.mファイルにシンセサイズしています。奇妙なことは、ファイルの1つがそれを見て、他のものは見ないということです。 – Jorgen

+0

可能であれば、アプリケーションデリゲートのコードを提供してください。 –

+0

偉大な答え、+1これは、アプリケーションの代理人を詰め込む代わりにシングルトンを使用しています。 –

0

ヘッダーファイルをインポートした場合、それは機能するはずです。あなたのプロジェクトをきれいにして再構築しようとしましたか? CMD + Shift + K(またはプロジェクトメニューからクリーンを選択することによって)を行うことができます。

+0

CMD-Shift-Kはそれをしませんでした。 – Jorgen

1

2つのビューコントローラが異なるAppDelegateコードを参照することがあります。 XcodeプロジェクトナビゲータにはAppDelegateファイルが1セットのみ表示され、Jump to DefinitionはどちらのAppDelegateクラス定義でも同じですが、View Controllerの1つに実際に異なるデリゲートコードがある場合があります。

デリゲートクラス定義でこの問題が発生しましたが、一部のメンバ変数は1つのビューコントローラでのみ使用でき、他のビューコントローラでは使用できませんでした。

Project Navigatorの各ViewController.mファイルを右クリックし、[Finderで表示]を使用して、両方が希望のAppDelegateファイルと同じ場所にあるかどうかを確認します。そうでない場合は、VCファイルを正しい場所に移動し、プロジェクトに追加します。

関連する問題