sharedApplication值不可见

时间:2012-08-28 22:40:21

标签: objective-c ios cocoa-touch

嗯,我有两个变量,一个NSString和一个NSMutable数组,这是我希望在所有选项卡中都是全局的值。到目前为止,我只有一个(NSString),我可以正常得到它的值。不,我尝试了另外一个变量我得到(null)值。

这是我的代码:

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轨:( null)

我无法理解为什么,因为我将其添加为MutableArray中的对象。当然,我在每个其他标签中都得到(null)。

你能帮帮我吗?我更喜欢通过修复代码而不是建议完全不同的东西,因为我在IOS方面不是很有经验。除非那么容易。

1 个答案:

答案 0 :(得分:1)

这很可能是因为您永远不会为tracks_condition属性实例化可变数组。只是在AppDelegate类上声明属性不会为您创建对象。在使用它之前,您仍需要在某个时刻分配/初始化对象。在此之前,tracks_condition保持为null,并且将忽略发送给它的任何消息(例如尝试将对象添加到数组中)。

您可以通过在使用对象之前实例化对象并设置属性值来解决此问题。您可以在应用代理application:didFinishLaunchingWithOptions:

中执行此操作
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.tracks_condition = [[NSMutableArray alloc] init];
}