Как установить NSString в классе из uitextfield из viewcontroller

#iphone #ios #uitableview #uitextfield

#iPhone #iOS #uitableview #uitextfield

Вопрос:

Я привязываюсь к set NSString * receiveCodeText; это в объекте со значением uitextfiled, которое находится в моем viewcontroller из моего viewcontroller внутри TableView:didSelectRowAtIndexPath: однако я получаю ошибку

/Пользователи / imac / Документы / приложения для Iphone / таблицы / Классы /RootViewController.m:198:0 /Пользователи / imac / Документы / приложения для Iphone / таблицы / классы /RootViewController.m:198: ошибка: доступ к неизвестному методу класса ‘setReceiveCodeText:’

/Пользователи / imac / Документы / приложения для Iphone / таблицы / Классы /RootViewController.m:198:0 /Пользователи / imac / Документы / приложения для Iphone / таблицы / Классы /RootViewController.m:198: ошибка: объект не может быть установлен — либо свойство только для чтения, либо установщик не найден

вот мой код и то, как я пытаюсь передать текст.

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    searchTableViewController *searchTable = [[searchTableViewController alloc] initWithNibName:@"searchTableViewController" bundle:nil];

    switch (indexPath.row) {
        case 1: {
            searchTable.editedFieldName = @"Make";
            //Pass code number over to DBAccess class
            DBAccess.receiveCodeText = self.codeText.text;
        } break;
        case 2: {
            searchTable.editedFieldName = @"Model";
        } break;
        case 3: {
            searchTable.editedFieldName = @"Year";
        } break;
    }

    [self.navigationController pushViewController:searchTable animated:YES];
    [searchTable release];
}
  

Комментарии:

1. вы не можете устанавливать свойства для классов, используя сокращенное обозначение свойства для установки значения DBAccess (которое, я полагаю, является вашим классом?) класс (НЕ экземпляр класса), я удивлен, что это вообще скомпилировано, есть ли предупреждения компилятора? в любом случае, я думаю, вы хотите получить экземпляр класса.

2. Вы @синтезировали это?

3. bshirley это не скомпилировалось 🙂 У меня все это работает, когда я жестко кодирую свой sqlquery, но я хочу установить его во время выполнения, отсюда и этот код 🙂

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

5. Я не уверен, что вы подразумеваете под определенным?

Ответ №1:

DBAccess это класс. Если setRecieveCodeText: это не метод класса, вы не можете использовать его напрямую. Свойства принадлежат экземпляру, а не классу, поэтому вам придется объявлять методы класса и использовать статическую переменную для обработки этого. Однако имеет смысл создать экземпляр, а затем использовать этот объект или даже использовать singleton, если вы хотите избежать нескольких экземпляров одного и того же класса. Синглтон должен быть доступен для использования во всех классах.

Я включил код, связанный с подходом метода класса.

 @interface DBAccess: NSObject {
}

  (NSString *)receiveCodeText;
  (void)setReceiveCodeText:(NSString *)code;
[..]
@end
  

В .m файле,

 static NSString * receiveCodeText;

@implementation DBAccess
[..]
  (NSString *)receiveCodeText {
    return receiveCodeText;
}

  (void)setReceiveCodeText:(NSString *)code {
    [receiveCodeText autorelease];
    receiveCodeText = [code copy];
}
[..]
@end