2012-07-01 2 views
0

У меня есть следующий код, который сохраняет объект в файл ...Сохранение объекта в файлах

-(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; 
} 
+0

Похоже, что пути 'return 3' или' return 4' могут быть достигнуты ... – gcbenison

+0

Да, у вас определенно отсутствует закрывающая скобка '}' после 'return 2;' ... – WendiKidd

+0

Правильно. Если он терпит неудачу, он всегда будет возвращен 2. Чтобы исправить это, вы должны переместить 'return 2' после операторов 2 if для' return 3' и 'return 4' – Dima

ответ

2

Просто начать: это утверждение не делает ничего:

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

Если ваш NSLog не попал, функция вообще не будет вызвана. Вы поставили точку останова в функцию и отлаживали ее, чтобы увидеть, действительно ли она когда-либо введена?

Также, как говорят, ваша функция в настоящее время никогда не будет return 3 или return 4. Чтобы он мог это сделать, return 2 следует переместить после тех блоков 2 if, чтобы он мог быть ошибкой по умолчанию, если другие 2 недействительны.

+0

Хорошая идея! Я поставил точку останова в методе, и я обнаружил, что моя программа никогда не останавливается ... ПОЧЕМУ ???? –

+1

Вы когда-либо инициализировали ObjectSaver * mainDict? Если объект не существует, методы не могут быть вызваны на него, и сообщение вернет 0. – WendiKidd

+0

Спасибо WendiKidd! Я не знал, что вам еще нужно было выделить/инициализировать объект, объявленный в файле .h ... –

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