2012-04-26 4 views
1

Я хотел бы улучшить этот метод, если это возможно: это небольшой раздел, в котором сохраняются все текстовые поля (окуляр, объективы и т. Д.). К сожалению, делать это много раз для каждой части моего приложения подвержено ошибкам, поэтому я хотел бы улучшить его. Я думаю о каком-то быстром перечислении с аргументами для метода, являющегося текстовыми полями и т. Д., И я могу иметь все ключи в словаре (который уже настроен). Просто указатель на правильные документы или, может быть, какой-то процесс, который сработал для вас, был бы фантастическим!Как избежать копирования и вставки?

-(IBAction)saveUserEntries { 


if (eyepiece.text != nil) { 

    eyepieceString = [[NSString alloc] initWithFormat:eyepiece.text]; 
    [eyepiece setText:eyepieceString]; 
    NSUserDefaults *eyepieceDefault = [NSUserDefaults standardUserDefaults]; 
    [eyepieceDefault setObject:eyepieceString forKey:@"eyepieceKey"]; 
} 
else { 
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"eyepieceKey"]; 
} 

if (objectiveLenses.text != nil) { 

    objectiveLensString = [[NSString alloc] initWithFormat:objectiveLenses.text]; 
    [objectiveLenses setText:objectiveLensString]; 
    NSUserDefaults *objectiveDefault = [NSUserDefaults standardUserDefaults]; 
    [objectiveDefault setObject:objectiveLensString forKey:@"objectiveKey"]; 
} 
else { 
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"objectiveKey"]; 
} 

Благодарим вас за то, что нашли время, чтобы прочитать это!

+1

Как представляется, это метод, названный 'saveUserEntries'. –

+1

Извинения, я, очевидно, не сделал это очень ясно, в фактическом методе мне нужно скопировать инструкции if-else и отредактировать каждый из них для всех текстовых полей. Это подвержено ошибкам, и я хотел бы использовать метод, который я могу использовать в другом месте, используя аргументы, возможно, –

ответ

2

Я попытаюсь ответить на этот вопрос на основе решения ООП.

Создайте метод, который принимает любой тип объекта, эти текстовые поля являются аргументом, отправьте ссылку указанного объекта методу и сохраните запись в аналогичном методе, который вы знаете. Это позволит избежать ошибок «копировать и вставлять», о которых вы беспокоитесь.

Вы должны иметь возможность перемещаться по каждому экземпляру указанного объекта, который существует, если приложение какао работает подобно Java и .NET (я действительно не знаю). Я просто знаю, что должен быть способ прокрутки каждого экземпляра одного объекта в домене приложения.

Если бы это был .NET, я бы просто предложил TextBox.Name и TextBox.String сделать этот общий метод, который можно было бы использовать для сохранения свойств любого отправляемого на него TextBox. Если это не ответит на ваш вопрос (было немного длинным для комментария), то я замалчиваю.

+0

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

+0

@RobW - Хотелось бы, чтобы я дал вам более эффективный ответ от Coca, код достаточно прост для понимания, я просто знаю, как Coca обрабатывает «элементы управления» (то есть TextBox), в Java и .NET все элементы управления в приложение наследует один класс (очень простое описание). –

+1

Невозможно пропустить каждый экземпляр класса, где бы он ни существовался в приложении (нарушение священного инкапсуляции, Бэтмен), но нет причин, по которым опросчик не мог просто вызвать их метод fillInField: withPreferencesValueForKey: ' один раз для поля окуляра, а затем снова для поля объектива. –

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