#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