Во-первых, я тщательно исследовал это и не смог найти ничего, что соответствовало бы тому, что я искал.
Моя проблема заключается в следующем: у меня есть строковое свойство, созданное в Class1 и затем синтезированное, как показано ниже.
@interface Class1 : UIViewController
{
NSString *testvar;
}
@property (nonatomic, retain) NSString *testvar;
@end
@implementation Class1
@synthesize testvar
- (void)viewDidLoad
{
[super viewDidLoad];
self.testvar = @"Test variable";
}
@end
Это прекрасно работает для определения значения переменной / свойства, так как оно работает в тесте UIAlertView
, отображаемом тем же методом viewDidLoad
, в котором он определен. Проблема возникает, когда другой класс, Class2, пытается получить и использовать собственность. Код, используемый во втором классе, выглядит следующим образом:
Class1 *foo = [[Class1 alloc]init];
UIAlertView *alert = [[UIAlertView alloc]initWithTitle: @"Title"
message:foo.testvar
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
[foo release];
Что происходит, так это то, что UIAlertView
отображается, но не имеет сообщения. Я полагаю, что значение свойства testvar Class1 высвобождается до того, как Class2 попытается получить его, или я задаю его неправильно. Я говорю это, потому что я пытался сделать то же самое, но использовал int вместо NSString
. Я установил значение int в 3 в Class1's viewDidLoad
, и когда отобразился UIAlertView
, он показал значение int, но отобразил «0», значение по умолчанию для int, а не мое заданное значение.
Будучи относительно новым для Objective-C и не обладая отличным знанием управления памятью, я думаю, что ошибка как-то связана с тем, где или как я устанавливаю значение моего свойства. Любое понимание будет оценено. Заранее спасибо.