2012-07-02 3 views
0

Почему, когда вы вызываете этот метод (объект saveObject: (id) для ключаKey: (NSString *)), файл не будет создан ???Создание файлов и сохранение объектов в них

Когда я называю это Filepath равно нулю, так что (- (Недействительными) 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]; 
} 
+0

Почему вы помеченный '[C]'? – Jack

+0

Вам действительно нужно изучить управление памятью –

+1

@max_: зачем это? Если он использует ARC, все кажется мне прекрасным. –

ответ

0

Я думаю, что проблема с содержанием словаря, который вы собираетесь писать. Вы добавляете object в словарь. Этот объект должен содержать только элементы типов: NSArray, NSDictionary, NSString, NSDate, NSData и NSNumber. Если ваш объект содержит int или float или что-то другое, кроме этого, он не будет писать.

Вы можете прочитать больше here

+0

Спасибо, ребята, я никогда не задумывался о том, чтобы выделить/инициализировать объект objectSaver –

Смежные вопросы