奇怪的应用代表问题

时间:2011-07-09 04:33:40

标签: iphone objective-c

在我的app委托中,我有多个NSStrings,声明如此

@property (nonatomic, retain) NSString *aString;

当我的视图第一次加载时,字符串值被设置

appDelegate.aString = @"aValue";

appDelegate

的位置
self.appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];

这一切都很好,但出于某种原因,它在我的iPad上不起作用。它适用于iPad和iPhone的模拟器(它是通用的)和我的iPhone。它早先工作,我没有搞砸它。每当我在设置后尝试访问该值时,它将返回null。关于我应该做什么的任何想法?

编辑1:我要做的是读取属性列表,如果值为null,我将手动设置如下:

if (appDelegate.aString == (id)[NSNull null] || appDelegate.aString.length == 0 ) {
        appDelegate.aString = @"aValue";
}

我在上面的if语句中放了一个NSLog,所以我知道代码正在执行,但是当我尝试记录aString时,它仍然是null,即使我只是设置它。

我还要补充一点,所有设备都运行4.3.x。

编辑2:如果我在applicationDidFinishLaunching中设置了值,则它不会出现null,这意味着必须在从视图控制器设置值时出现问题。我不明白为什么它只能在一台设备上运行。

2 个答案:

答案 0 :(得分:0)

除非您在其他地方明确使用NSNull,否则请尝试使用if (appDelegate.aString == nil || ...,或者只使用if (!appDelegate.aString || ...

答案 1 :(得分:0)

在appdelegate中添加名称为

的方法
- (void) setaString:(NSString*) str{
//add logs and breakpoints here
}

机会是 1.其他一些东西是访问字符串。 2.字符串正在某处释放。