2012-11-07 2 views
2

В настоящее время я работаю над небольшим и конкретным приложением для iPhone, чтобы подключиться к серверу и загрузить некоторые данные JSON. Моя проблема связана с списком свойств, который я использую для сохранения некоторых данных (логин, пароль и домен сервера). Я легко создал plist в Xcode, но когда я пытаюсь отредактировать его с текстами, введенными пользователем, у меня возникла проблема, и я не знаю, как это исправить ...setValue: forKey: с NSString

textFieldDidEndEditing: method, в которой я стараюсь писать в PLIST, с тем, что пользователь написал в domainTextField:

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 

    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *filepath = [NSString stringWithFormat:@"%@/userInfo.plist", [paths objectAtIndex:0]]; 
    NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] initWithContentsOfFile:filepath]; 

    if (self.domainTextField) { 
     NSString *domain = [NSString stringWithFormat:@"%@", self.domainTextField.text]; 
     [userInfo setValue:domain forKey:@"domain"]; 
    } 

    if ([userInfo writeToFile:filepath atomically:TRUE]) { 
     NSLog(@"write succeeded"); 
    } else { 
     NSLog(@"write failed"); 
    } 
} 

Я всегда получать «ошибка записи» ошибка здесь и поиграв немного с отладчиком, Я обнаружил, что проблема связана с setValue:forKey: method. Фактически, я ожидаю, что этот метод напишет, что в plist: domain = "whateverthedomainis", потому что domain является NSString, но вместо этого он пишет: domain = whateverthedomainis. И поскольку метод writeToFile: atomically: гарантирует, что все объекты являются объектами списка свойств, он возвращает NO. Я попытался поместить обратную косую черту, но это не помогло.

Что можно сделать, чтобы устранить эту ошибку?

+0

Я думаю, что вам может понадобиться, чтобы избежали этой строки, я хотел бы использовать метод бинарного экономии вместо plist one –

+0

Спасибо за ваш комментарий. Я попробую двоичный метод, но я был бы удивлен, что они не могут сделать это без двоичного кода. – user1796616

+0

Попробовали ли вы вместо этого использовать метод 'NSMutableDictionary'' setObject: forKey: 'вместо кода Key-Value-Coding? – trojanfoe

ответ

0

StringWithFormat будет использовать, если у вас есть какие-либо аргументы в строке, так что вы можете непосредственно присвоить строковое значение, как этот

NSString *domain = self.domainTextField.text; 
+0

Правильно stringWithFormat был бесполезен, но он не разрешает мою ошибку. Спасибо, в любом случае – user1796616

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