0

NSStringとNSMutableArrayの2つの変数があります。これらは、すべてのタブでグローバルにしたい値です。これまでのところ、1つ(NSString)しかなく、その値を正常に取得できました。いいえ、(null)値を取得する変数をもう1つ取得しようとしました。

これが私のコードです:

AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (nonatomic,retain) NSString *myDate;
@property (nonatomic,copy) NSMutableArray *tracks_condition;

@end

そして、HomeView.mで値を割り当てると

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  parsed_date=[res objectForKey:@"date"];
    NSLog(@"Date:%@",parsed_date);
    delegate.myDate = parsed_date;
    NSString *parsed_track=[res objectForKey:@"Data1"];
    [delegate.tracks_condition addObject:parsed_track];
    NSLog(@"Track 0 Static:%@",parsed_track);
    NSLog(@"Track 0:%@",[delegate.tracks_condition objectAtIndex:0]);

parsed_dateは正常に出力されており、他のタブからアクセスできます。

しかし、私は次のようになります:トラック0静的:0トラック0 :(ヌル)

そして、MutableArrayのオブジェクトとして追加しているので、理由がわかりません。もちろん、他のすべてのタブで(null)を取得します。

手伝って頂けますか?私はIOSの経験があまりないので、そのコードを修正し、まったく異なるものを提案しないことを好みます。それがそれほど簡単でない限り。

4

1 に答える 1

1

ほとんどの場合、これは、tracks_conditionプロパティの可変配列をインスタンス化していないためです。AppDelegateクラスでプロパティを宣言するだけでは、オブジェクトは作成されません。オブジェクトを使用する前に、ある時点でオブジェクトを割り当て/初期化する必要があります。それまで、tracks_conditionはnullのままであり、それに送信されたメッセージ(オブジェクトを配列に追加しようとするなど)は無視されます。

これを修正するには、オブジェクトをインスタンス化し、プロパティの値を設定してから使用します。あなたはあなたのアプリの代表者のでこれを行うことができますapplication:didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.tracks_condition = [[NSMutableArray alloc] init];
}
于 2012-08-28T22:49:16.543 に答える