【问题标题】:xcode empty var that was set properly正确设置的xcode空var
【发布时间】:2012-02-26 02:17:45
【问题描述】:

我在访问它时得到一个空的 var 值。该 var 已被正确覆盖。

“name1”在 .h 中声明,如:

NSString *nomTab1;

@property (strong, nonatomic) NSString *nomTab1;

在.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    NSArray *viewControllers = [NSArray alloc];

    nomTab1 = [NSString alloc];

也在函数执行期间被合成和正确设置。但是,当我尝试从另一个函数(同一个控制器)访问它时,它有一个空值。似乎是一个基本问题,但不起作用...谢谢。

【问题讨论】:

  • 您确定在访问之前设置了该值吗?
  • 您的问题中没有足够的信息。发布您的初始化代码。
  • 是的,已经分配了。还是不行
  • 已分配但未初始化。

标签: iphone objective-c ios xcode cocoa-touch


【解决方案1】:

您没有保留 nomTab1。你说你已经合成了它,但你没有使用self.nomTab1 = ...,所以这个值没有被保留。

查看this 了解有关合成和属性的说明。

【讨论】:

    【解决方案2】:

    你必须初始化它。您的类中应该有一个如下所示的 init 方法:

    - (id)init {
        self = [super init];
        if (self) {
            // do something
            self.nomTab1 = [NSString string];
        }
        return self;
    }
    

    【讨论】:

      【解决方案3】:

      您的代码中不应该有裸分配。你应该把 alloc 和 init 放在一起,像这样:

      NSArray *viewControllers = [[NSArray alloc] initWithObjects:..];
      nomTab1 = [[NSString alloc] initWithSomeValue:...];
      

      NSArrays 和 NStrings 是不可变的,因此在初始化之前它们没有任何价值(这可能是当您访问它们时它们看起来为空的原因),并且它们一旦被初始化就无法更改。

      如果您打算稍后设置它们的值,或者将它们设置为 nil 并在知道它们是什么后将它们设置为一个对象,或者使用 NSMutableArray 和 NSMutableString,它们可以在创建后进行修改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-30
        • 2011-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多