Хотя у меня достаточно опыта в разработке приложений для iOS, я все еще новичок в разработке приложений для Mac OS X.
Проблема, с которой я сталкиваюсь, заключается в следующем...
Я создал пользовательский интерфейс со списком, несколькими текстовыми полями и двумя текстовыми представлениями.Всякий раз, когда пользователь изменяет выбранное значение NSComboBox, я хочу сохранить все отображаемые в данный момент значения в моей модели.В моей текущей реализации я использую метод делегата NSComboBoxDelegate для сохранения данных в модель ( -comboBoxWillPopUp: ) - другой метод делегата используется для загрузки данных ( -comboBoxSelectionDidChange: ).Все работает, как и ожидалось, для моих текстовых полей, но у меня возникают проблемы с сохранением данных текстовых представлений в модель, и я не могу понять, в чем причина.
Что касается NSTextView, у меня естьследующая проблема: вместо того, чтобы просто сохранять значения для старой локализации в модели и загружать значения вновь выбранной локализации, каким-то образом происходит некоторое кэширование - значения старой локализации копируются для вновь выбранноголокализация в текстовом представлении, и это также происходит в моей модели данных.
просмотр контроллера:
- (void)comboBoxSelectionDidChange:(NSNotification *)notification
{
NSInteger index = [comboBox indexOfSelectedItem];
NSString *selectedLocale = [supportedLocales objectAtIndex:index];
text = [deal valueForContentItemWithType:SDDealContentItemTypeTitle locale:selectedLocale];
titleField.stringValue = text ? text : @"";
text = [deal valueForContentItemWithType:SDDealContentItemTypeText locale:selectedLocale];
textView.string = text ? text : @"";
}
- (void)comboBoxWillPopUp:(NSNotification *)notification
{
NSInteger index = [comboBox indexOfSelectedItem];
NSString *selectedLocale = (index != NSUIntegerMax) ? [supportedLocales objectAtIndex:index] : [supportedLocales objectAtIndex:0];
// works fine ...
text = titleField.stringValue;
[deal setValue:text forContentItemWithType:SDDealContentItemTypeTitle locale:selectedLocale];
// has issues ...
text = textView.string;
[deal setValue:text forContentItemWithType:SDDealContentItemTypeText locale:selectedLocale];
}
модель:
- (id)valueForContentItemWithType:(SDDealContentItemType)type locale:(NSString *)locale
{
SDDealContentItem *item = [self contentItemWithType:type locale:locale];
return item ? item.value : nil;
}
- (void)setValue:(id)value forContentItemWithType:(SDDealContentItemType)type locale:(NSString *)locale
{
SDDealContentItem *item = [self contentItemWithType:type locale:locale];
if (!item)
{
SDDealContentItem *item = [SDDealContentItem contentItemWithType:type locale:locale];
item.value = value;
self.items = [self.items arrayByAddingObject:item];
return;
}
item.value = value;
}