Objective-c Iphone как установить значение по умолчанию для свойства
Привет, у меня есть следующий код в ViewController.h:
#import <UIKit/UIKit.h>
@interface CalcViewController : UIViewController {
NSNumber* result;
NSString* input;
//NSString* input = @"";
IBOutlet UITextField* display;
}
@property (retain) NSNumber* result;
@property (retain) NSString* input;
@property (nonatomic, retain) UITextField* display;
@end
Проблема заключается в том, что я хочу добавить строку для ввода, но это невозможно, если ее значение равно null. Вот почему я хочу установить значение по умолчанию для ввода "@". Но где я могу поместить этот код.
Я знаю одно возможное решение, в котором вы помещаете его в конструктор по умолчанию. Но я не знаю, в какой файл это поставить. И где я должен это назвать.
К сожалению, я получил ограниченное понимание C и понял, что, возможно, файл .h не подходит.
Тип проекта - это приложение на основе вида, если вам это нужно.
Надеюсь, что вы сможете помочь.
Ответы
Ответ 1
Вам может быть полезно прочитать некоторую документацию на Objective-C или Cocoa. Вероятно, вы найдете полезные рекомендации по чтению материалов, если вы выполняете поиск в StackOverflow или в Google.
Чтобы ответить на ваш вопрос, вы должны иметь @implementation CalcViewController. Один из них чаще всего помещал бы эту @implementation внутри файла *.m. Если ваш *.h файл имеет имя "ViewController.h", реализация будет идти в "ViewController.m".
Затем вы создадите копию функции инициализации UIViewController и поместите ее туда (я не знаю, что такое функция init по умолчанию).
Например:
@implementation CalcViewController
@synthesize result;
@synthesize input;
- (id)initWithNibName:(NSString*)aNibName bundle:(NSBundle*)aBundle
{
self = [super initWithNibName:aNibName bundle:aBundle]; // The UIViewController version of init
if (self) {
input = [[NSString alloc] initWithString:@""]; // You should create a new string as you'll want to release this in your dealloc
}
return self;
}
- (void)dealloc
{
[input release];
[super dealloc];
}
@end // end of the @implementation of CalcViewController
ПРИМЕЧАНИЯ:
- Вы можете переименовать файл в CalcViewController. Я считаю, что для механизма рефакторинга Xcode проще справиться.
- Вам не нужно объявлять @property для переменной экземпляра дисплея при подключении с помощью Interface Builder. Если вы не хотите, чтобы клиенты CalcViewController часто меняли его.
РЕДАКТИРОВАТЬ: 28 апреля 2009 года: 10:20 утра EST: Я предлагаю на самом деле выделить NSString, поскольку вы должны технически освободить его в dealloc.
EDIT: 28 апреля 2009: 11:11 AM EST: я обновил @implementation, чтобы использовать версию init для UIViewController.
Ответ 2
Очень хороший вопрос. Короткий ответ - инициализировать значения в функции init. Вам необходимо перезаписать функцию init по умолчанию, чтобы значение по умолчанию было готово до того, как объект будет использоваться.
Я хотел бы предложить людям прекратить предлагать другим прочитать документ; пожалуйста, ответьте на вопрос напрямую, если сможете.
Ответ 3
Другой вариант - написать собственный getter для вашего свойства ввода и вернуть @"", если переменная экземпляра равна nil. Это будет работать, даже если вы случайно или намеренно назначили nil для ввода, тогда как использование init для установки значения по умолчанию будет нарушено.
Ответ 4
Самый очевидный способ реализовать это будет выглядеть следующим образом:
-
В файле viewcontroller.m переопределите метод init по умолчанию.
Этот метод вызывается каждый раз, когда инициализируется контроллер представления.
Таким образом, это лучший способ инициализировать вашу переменную.
- (id)initWithNibName:(NSString*)aNibName bundle:(NSBundle*)aBundle {
self = [super initWithNibName:aNibName bundle:aBundle]; // The UIViewController version of init
if (self) {
varName = [[NSString alloc] initWithString:@""];
}
return self;
}
-
Теперь, в любом коде вашего кода вы хотите добавить строку к своему
оригинальная строка, просто используйте: varName = [NSString
stringwithformat:@"%@%@", varName, newString];