创建文件并在其中保存对象

Posted

技术标签:

【中文标题】创建文件并在其中保存对象【英文标题】:Creating Files And Saving Objects In Them 【发布时间】:2012-07-02 23:32:00 【问题描述】:

为什么当你调用这个方法(saveObject: (id)object forKey: (NSString *) key)时,文件不会被创建???

当我调用它时,filePath 等于 nil,所以 (-(void) setFilePath: (NSString *)fileName) 方法将被调用...

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

    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]) 
        if(object == nil) 
            return 3;
        
        if(key == nil) 
            return 4;
        
        return 2; //ERROR could not write object to file
     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


-(void) setFilePath: (NSString *)fileName 
    paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    documentsDirectory = [paths objectAtIndex:0];
    if(fileName == nil) 
        fileName = @"savedObjects";
    
    filePath = [NSString stringWithFormat:@"%@/%@.plist",documentsDirectory, fileName];

【问题讨论】:

你为什么要标记[C] 你真的需要研究内存管理 @max_:为什么?如果他使用 ARC,我觉得一切都很好。 【参考方案1】:

我认为问题在于您打算编写的字典的内容。 您正在将object 添加到您的字典中。 该对象只能包含以下类型的成员:NSArray、NSDictionary、NSString、NSDate、NSData 和 NSNumber。如果您的对象包含 int 或 float 或这些以外的任何内容,则不会写入。

您可以阅读更多here

【讨论】:

谢谢大家,我从来不记得分配/初始化 objectSaver 对象

以上是关于创建文件并在其中保存对象的主要内容,如果未能解决你的问题,请参考以下文章

在 Bash 中从文本文件创建数组

使用 JTextField 创建/编辑对象

从文件加载 sql 并在 oracle 中创建它的视图

Android Studio创建buildSrc目录,并在其中写gradle打包apk等文件生成zip

将数组保存到 JSON 文件,然后使用 Array.push() 将数据保存在其中

是否可以在文件中保存/存储数组中的对象?