Почему я не могу написать словарь для plist? - PullRequest
1 голос
/ 01 декабря 2010

Эй, все, у меня тут странная проблема
Сначала я создаю небольшой проект, чтобы попытаться написать словарь для plist
Я объявил текстовое поле и кнопку, и это код IBAction:

NSArray *localPathsTemp   = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *localDocPathTemp    = [localPathsTemp objectAtIndex:0];
NSString *localFilePathTemp   = [localDocPathTemp stringByAppendingPathComponent:@"InputPassword.plist"];
NSMutableDictionary *localDictreadTemp  = [[NSMutableDictionary alloc] initWithContentsOfFile:localFilePathTemp];
NSMutableDictionary *localSerialNumber = [NSMutableDictionary dictionaryWithObject:setSN.text
                                                                                forKey:@"input_serial_number"];

Я пытаюсь записать то, что я пишу

NSLog(@"Local Dictionary : %@",[localDictreadTemp valueForKey:@"input_serial_number"]);//"input_serial_number=1"
NSLog(@"Dictionary-localSerialNumber is %@",[localSerialNumber valueForKey:@"input_serial_number"]);//1(I enter 1 at textfield)

Все хорошо, как я думаю

Но я перенесу все это в свой проект

Я получил NULL

Это код в моем исходном проекте (в виде предупреждения)

NSArray *localPathsTemp   = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *localDocPathTemp    = [localPathsTemp objectAtIndex:0];
NSString *localFilePathTemp   = [localDocPathTemp stringByAppendingPathComponent:@"InputPassword.plist"];
NSMutableDictionary *localDictreadTemp  = [[NSMutableDictionary alloc] initWithContentsOfFile:localFilePathTemp];
NSMutableDictionary *localSerialNumber = [NSMutableDictionary dictionaryWithObject:setLocalSerialNumber.text
                                                                                        forKey:@"input_serial_number"];
[localDictreadTemp addEntriesFromDictionary:localSerialNumber];
[localDictreadTemp writeToFile:localFilePathTemp atomically:YES];


NSLog(@"Text in the textfield:%@",setLocalSerialNumber.text);
NSLog(@"Local Dictionary %@",localSerialNumber);//"input_serial_number" = 1 
NSLog(@"Dictionary-LocalDictreadTemp %@",[localDictreadTemp valueForKey:@"input_serial_number"]);//NULL

Последний результат - NULL

Это проблема, которую я не могу понять, я получил значение в образце, но здесь не работает.

Почему ... я указал неправильный путь к файлу или ...?

Спасибо за все ответы


Подробнее о моем проекте

Мое приложение используется для управления аппаратным устройством
Если пользователь впервые использует приложение
Пользователь должен ввести пароль и серийный номер устройства
Устройство используется Bonjour для поиска устройства
И получить серийный номер / пароль по умолчанию из URL-адреса (в этом случае в WIFI)
Например: URL http://11.33.44.65/defaultsn_pwd.php

Я получу файл plist, например:

{
     sn  = 1; 
     pwd = 777;
}

Это информация, которую пользователь не может видеть.
И приложение отобразит alertView с двумя текстовыми полями
Если текст в текстовом поле соответствует URL формы sn / pwd
Это будет писать в.
Но !!! если пользователь находится в среде 3G, он подключится к моему серверу для управления устройством
Это сильно отличается от Wifi, потому что вы должны дать серверу серийный номер устройства

Итак

  1. Введите серийный номер (мне нужно написать в plist на iphone, но получил NULL здесь)

  2. Взять серийный номер как часть нового URL, например. http://server/defaultsn_pwd.php? Sn = 1

Потому что я не могу написать серийный номер в plist, поэтому я не могу получить правильный URL
Мой URL будет похож на http://server/defaultsn_pwd.php? Sn = NULL
Это приведет к краху моей программы

Это очень смертельные проблемы, пожалуйста, помогите мне разобраться с этой проблемой ...

Я слишком долго занимался этой проблемой ...

1 Ответ

1 голос
/ 01 декабря 2010
NSMutableDictionary *localDictreadTemp  = [[NSMutableDictionary alloc] initWithContentsOfFile:localFilePathTemp];

Бьюсь об заклад, это проблема. Если вы не записываете файл в это место в другом месте кода, в localFilePathTemp нет файла. Поскольку этот файл пуст, ваш initWithContentsOfFile возвращает словарь nil, а остальное - цепная реакция nil-объектов.

попробуйте это:

if ([[NSFileManager defaultManager] fileExistsAtPath:localFilePathTemp]) {
    NSLog(@"file exists at %@",localFilePathTemp);
} else NSLog(@"Some dude from the internet solved my problem, I should probably go choose his answer");
...