У меня есть конфигурация основных данных в моем приложении для iPhone, и то, как я в настоящее время передаю конфигурацию в представление, которое позволяет пользователю РЕДАКТИРОВАТЬ данные, заключается в передаче базового объекта данных по ссылке. Фактически я выделил атрибут класса базовых данных (NSString) для «UITextField.text» в представлении редактирования, так что, если он обновляется, он эффективно обновляет объект основных данных. Вопрос:
- кажется, что работает нормально, когда я создаю / обновляю эту строку в режиме редактирования
- когда я обновляю отдельное поле (не рассматриваемое), тогда значение кажется равным нулю
Вопрос - Есть ли что-то принципиально неправильное в этом подходе передачи по ссылке с использованием атрибута управляемого объекта базовых данных?
Фрагменты кода:
а) В контроллере редактирования - в cellForRowAtIndexPath
if (indexPath.row == 0) {
// Setup
UITextField *titleTextField = nil;
// Get Cell
self.nonWorkTermCell = [tableView dequeueReusableCellWithIdentifier:@"nonWorkTermCell"];
if (self.nonWorkTermCell == nil) {
self.nonWorkTermCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"nonWorkTermCell"] autorelease];
self.nonWorkTermCell.textLabel.text = @"Non Work Term:";
titleTextField = [[self newTextFieldForCell:self.nonWorkTermCell] autorelease];
titleTextField.keyboardType = UIKeyboardTypeURL;
titleTextField.returnKeyType = UIReturnKeyDone;
titleTextField.delegate = self; // TODO: Is this needed at all?
titleTextField.tag = 1;
[self.nonWorkTermCell addSubview:titleTextField];
}
// Set Value
titleTextField.text = self.weConfig.nonWorkTerm; // ** ASSIGNS THE CORE DATA MANAGED OBJECT CONFIG ITEM DIRECTLY TO THE TEXT FIELD
// Return
return self.nonWorkTermCell;
b) и вспомогательный метод, который он использует:
- (UITextField *)newTextFieldForCell:(UITableViewCell *)cell {
UITextField *addTextField = [[UITextField alloc] initWithFrame:frame]; //cut the code for the frame to save space
addTextField.autocorrectionType = UITextAutocorrectionTypeNo;
addTextField.autocapitalizationType = UITextAutocapitalizationTypeNone;
addTextField.delegate = self;
addTextField.clearButtonMode = UITextFieldViewModeNever;
addTextField.enabled = YES;
addTextField.returnKeyType = UIReturnKeyDone;
addTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return addTextField;
}
в) затем вернемся к делегату
- (void)applicationWillResignActive:(UIApplication *)application {
[self saveContext];
}
- (void)applicationWillTerminate:(UIApplication *)application {
[self saveContext];
}