【问题标题】:Problems with NSString inside viewWillDisappearviewWillDisappear 中的 NSString 问题
【发布时间】:2011-10-31 11:09:44
【问题描述】:

我与这段代码斗争了好几天,我真的很感激你的洞察力。所以这里...

fileName 在我的.h 文件中声明为

    NSString *fileName;

后来变成了

    @property (nonatomic, copy) NSString *fileName;

viewWillDisappear 内无法访问。它只是显示为 nil 对象,或者在我调试时显示为一些奇怪的值。当我调试时,我的控制台会显示这个消息:

文件名的打印说明: 文件编号1

当我到达viewWillDisappear 时,我的控制台会显示:

文件名的打印说明:

是的,fileName 什么都没有。值只是消失了。我只是不知道为什么!!!

更多详情

在我的 init 方法中,我执行以下操作,它工作正常。

    fileName = [[NSString alloc] initWithString:(NSString *)CFURLGetString(pdfURL)]; 
    fileName = [[fileName lastPathComponent] stringByDeletingPathExtension];
    fileName = [fileName stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

在整个程序中,我可以访问fileName 就好了,但在viewWillDisappear 内部,我试图通过尝试以下操作来保存到我的standardUserDefaults

    NSUserDefaults *ud = [[NSUserDefaults standardUserDefaults] autorelease];
    NSArray *tmp = [NSArray arrayWithArray:someMutableArray];
    [ud setObject:tmp forKey:fileName];    // THE PROBLEM IS HERE WITH fileName AS AKEY
    [ud synchronize];
    [tmp release];

此时someMutableArray 可以访问,但fileName 不可用。任何见解,想法,想法,将不胜感激。

【问题讨论】:

    标签: iphone ios nsstring nsuserdefaults viewwillappear


    【解决方案1】:

    在您的 init 方法中将其更改为读取 self.fileName =

    您需要使用您的属性方法以便制作字符串的副本,目前因为您使用的是变量而不是您分配自动释放字符串的属性。通过使用 self.fileName 字符串将被复制并且不会被自动释放。

    【讨论】:

    • 克雷格,非常感谢您的快速回答。它确实解决了我上面提到的问题。我现在还有其他问题,但至少与此无关:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多