Почему мой [словарь objectForKey: @ "TOSAcceptedValue"] нулевой? - PullRequest
0 голосов
/ 10 сентября 2011

Я пишу и читаю из списка в моем каталоге документов.Сначала я записываю файл, если файл не найден.Казалось, что это работает правильно, потому что сначала там не было файла, а теперь есть, и двойной щелчок по файлу показывает ожидаемое содержимое ключа с именем TOSAcceptedValue со значением NO.

Но еслифайл найден, что произошло после того, как я запустил вышеупомянутое, я пытаюсь прочитать в том же значении, я получаю нулевое значение.Вот код, он может быть не очень красивым, так как я некоторое время его взламывал, чтобы заставить его работать.

NSError *error;
NSString *TOSAcceptedStatus ;

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSLog( @"paths is %@", paths);

NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"AppUsage.plist"];

NSFileManager *fileManager = [NSFileManager defaultManager];

//first see if file exists. if it doesn't then write it out with a value of NO for Terms of Use Accepted
if (![fileManager fileExistsAtPath: path])
{                
    NSMutableDictionary *appUsageNo = [[NSMutableDictionary alloc] initWithContentsOfFile: path];

    //here add element to data file and write data to file
    NSString *value = @"NO";

    [appUsageNo setObject:@"TOSAcceptedValue" forKey:value];

    [appUsageNo writeToFile: path atomically:YES];
    [appUsageNo release]; 

    //and set TOSAcceptedStatus to no since we know its a no right now
    TOSAcceptedStatus = @"NO";

}
else { //file was found at expected location so let's see if they accepted Terms of Use already

    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
    NSLog( @"path is %@", path);

    TOSAcceptedStatus = [dictionary objectForKey:@"TOSAcceptedValue"];
    //NSLog(@"TOSAcceptedStatus is %@", TOSAcceptedStatus);
    NSLog(@"TOSAcceptedStatus is %@", [dictionary objectForKey:@"TOSAcceptedValue"]);

    [dictionary release];
}

и вот мои результаты Консоли

2011-09-09 21:47:23.177 myApp[1027:207] paths is (
    "/Users/user1/Library/Application Support/iPhone Simulator/4.3/Applications/34562D85-DBE9-4A4F-A142-JEFC1F4808D1/Documents"
)
2011-09-09 21:47:44.915 myApp[1027:207] path is /Users/user1/Library/Application Support/iPhone Simulator/4.3/Applications/34562D85-DBE9-4A4F-A142-JEFC1F4808D1/Documents/AppUsage.plist
2011-09-09 21:47:50.448 myApp[1027:207] TOSAcceptedStatus is (null)

Любыеподсказки, почему я не могу получить TOSAcceptedStatus обратно?

Кроме того, мне разрешено писать и читать из списка после запуска приложения?

1 Ответ

2 голосов
/ 10 сентября 2011

Я думаю, что ваша главная проблема в том, что у вас есть объект и ключ назад:

[appUsageNo setObject:value forKey:@"TOSAcceptedValue"];
...