将对象保存到文件

时间:2012-07-01 16:34:05

标签: iphone objective-c ios c cocoa-touch

我有以下代码将对象保存到文件中......

-(int) saveObject: (id)object forKey: (NSString *) key 
{
    //save object into file

    NSLog(@"PRESENT");
    if(filePath == nil) 
    {
        [self setFilePath:nil];
    }

    mainDict = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
    if(mainDict == nil) 
    {
        mainDict = [[NSMutableDictionary alloc] init];
    }

    [mainDict setObject:object forKey:key];

    if(![mainDict writeToFile:filePath atomically:YES]) 
    {
        return 2; //ERROR could not write object to file
        if(object == nil) {
            return 3;
        }
        if(key == nil) {
            return 4;
        }
    } 
    else 
    {
        if(shouldUseCache == YES) {
            cacheStatus = 2; //New Caches need to be updated
        }
        return 1; //SUCCESS object saved to file
    }

    //RETURN KEY's
    // *1 SUCCESS object saved to file
    // *2 ERROR could not write object to file
    // *3 ERROR object variable = nil
    // *4 ERROR key variable = nil
}

正如你所看到的那样,方法应该清楚地返回1到4之间的数字,但是当我在视图控制器中调用该方法时,我得到0 ???

最奇怪的部分是我甚至没有在我的控制台中收到NSLog(@“Present”)???

问题是什么以及导致这个问题的原因???

这是我的简单视图控制器......

NSLog(@"%d",[mainDict saveObject:@"HELLO" forKey:@"foo"]);

我的.h文件......

#import <UIKit/UIKit.h>
#import "ObjectSaver.h"

@interface ViewController : UIViewController {
    ObjectSaver *mainDict;
}

1 个答案:

答案 0 :(得分:2)

刚开始:这句话没有做任何事情:

 if(filePath == nil) {
     [self setFilePath:nil]; }

如果您的NSLog没有被命中,那么该函数根本不会被调用。你有没有断点进入函数并进行调试,看看它是否真的进入过?

正如评论所说,您的功能目前不会是return 3return 4。为了能够这样做,return 2应该在这2个if块之后移动,以便如果其他2个无效,它可以是默认错误。