0

複数のビューを持つナビゲーション ベースのアプリケーションがあります。アプリケーション全体で 1 つの NSMutableArray を使用することは可能ですか? あるビューでその NSMutableArray にオブジェクトを追加してから、別のビューの同じ NSMutableArray からオブジェクトを削除できますか? 私は試した

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

しかし、appDelegate の配列にアクセスしようとすると null が返されます。誰かが私にアイデアを提供したり、リンクやチュートリアルを支援したりできる場合。前もって感謝します。

4

4 に答える 4

2

アプリケーションに複数のビューがあり、その場合はすべてのビューにアクセスできる変数が必要な場合は、常にModel / Data(singleton)クラスを作成し、そのクラスで変数を定義する必要があります。このようなもの :

//DataClass.h      

@interface DataClass : NSObject {    

NSMutableArray *arrGlobal;     

}    
@property(nonatomic,retain)NSMutableArray *arrGlobal;   
+(DataClass*)getInstance;    
@end  



//DataClass.m    
@implementation DataClass    
@synthesize arrGlobal;    
static DataClass *instance =nil;    
+(DataClass *)getInstance    
{    
    @synchronized(self)    
    {    
        if(instance==nil)    
        {    

            instance= [DataClass new];    
        }    
    }    
    return instance;    
}    

次に、View Controllerで、このメソッドを次のように呼び出す必要があります。

DataClass *obj=[DataClass getInstance];  
obj.arrGlobal = arrLocal; 

この変数は、すべてのViewControllerからアクセスできます。Dataクラスのインスタンスを作成する必要があります。

于 2011-10-03T14:08:55.657 に答える
2

あなたのタイプの問題については、シングルトンを使用します。

http://en.wikipedia.org/wiki/Singleton_pattern

appdelegate もシングルトンですが、独自のシングルトンを使用すると、コード化された行数を少し減らすことができます。

于 2011-10-03T14:02:55.453 に答える
1

AppDelegate アプローチは機能するはずであり、シングルトンを使用したとしても、機能しない理由をおそらく理解する必要があります。

ポインターを取得するステートメントはappDelegate正しいように見えるので、配列へのポインターがmyappDelegateクラスで設定 (および保持) されていないか、最初に AppDelegate インスタンスを正しく作成しなかったと推測しています。

于 2011-10-03T14:59:59.443 に答える