为什么我的字符串不会显示在UIAlertView中

Fur*_*ing 3 properties class objective-c uialertview ios

首先,我已经对此进行了彻底的研究,但未能找到符合我要求的任何内容.

我的问题是这样的:我在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
Run Code Online (Sandbox Code Playgroud)

这适用于定义变量/属性的值,因为它在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];
Run Code Online (Sandbox Code Playgroud)

会发生什么是UIAlertView显示,但没有消息.我相信Class1 testvar属性的值在Class2尝试检索它之前被释放,或者我设置错误.我说这是因为我尝试过同样的事情,但是使用的是int而不是NSString.我在Class1中将int的值设置为3 viewDidLoad,当UIAlertView显示时,它显示int的值,但显示为"0",int的默认值,而不是我的设置值.

作为Objective-C的新手并且还没有很好地掌握内存管理,我认为错误与我设置属性值的位置或方式有关.任何见解将不胜感激.提前致谢.

ARC*_*ARC 6

你做错了.仅当在另一个类中初始化该视图时绘制该视图时,才会调用viewDidLoad方法.

在Class1中定义一个方法 - (id)init并移动你的self.testvar = @"Test Variable"; 进去.然后它应该按预期工作.

- (id)init
{
   if(self = [super init])
   {
     self.testvar = @"Test Variable";
   }
   return self;
}
Run Code Online (Sandbox Code Playgroud)