【问题标题】:Creating NSObject with NSArray [duplicate]使用 NSArray 创建 NSObject [重复]
【发布时间】:2013-11-12 07:06:20
【问题描述】:

我正在尝试创建一个 NSObject 类,其中包含一个包含字母表的数组。当我尝试实现数组时,我收到一条警告,指出“Initializer element is not a compile-time constant”我已经研究过它,它与程序不知道在编译时将使用哪个值有关我不知道如何用我得到的代码来纠正这个问题。我这里有接口​​和实现代码:

#import <Foundation/Foundation.h>

@interface Alphabet : NSObject {
    NSArray *alphabet;
}
@end

#import "Alphabet.h"

@implementation Alphabet

NSArray *alphabet = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m",@"n",@"o",@"p",@"q",@"r",@"s",@"t",@"u",@"v",@"w",@"x",@"y",@"z", nil];


@end

【问题讨论】:

标签: ios objective-c nsarray nsobject


【解决方案1】:

您必须在-(id)init 之类的方法中初始化对象。您可以在@implementation 下声明对象,例如:

@implementation Alphabet
{
    NSArray *alphabet;
}

- (id)init
{
    self = [super init];
    if (self)
    {
        NSLog(@"init");
        NSArray *alphabet = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m",@"n",@"o",@"p",@"q",@"r",@"s",@"t",@"u",@"v",@"w",@"x",@"y",@"z", nil];
    }
    return self;
}

@end

如果在方法之外初始化对象,则需要将该对象的值写入可执行文件。所以在这种情况下你只能使用一个常数值。在运行时之前,您不能创建除常量之外的任何 Objective-C 对象。

【讨论】:

    【解决方案2】:

    您可以将数组设为属性并“懒惰地”初始化它:

    @interface Alphabet : NSObject
    @property (nonatomic, strong) alphabet;
    @end
    
    
    
    #import "Alphabet.h"
    
    
    @implementation Alphabet {
        NSArray* _alphabet;
    }
    
    @synthesize alphabet = _alphabet;
    
    
    // getter
    - (NSArray*) alphabet {
        if (_alphabet == nil) {
            _alphabet = @[@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m",@"n",@"o",@"p",@"q",@"r",@"s",@"t",@"u",@"v",@"w",@"x",@"y",@"z"];
        }
        return _alphabet;
    }
    
    
    @end
    

    注意:

    声明

    _alphabet = @[@"a",@"b",@"c", ..., @"z"];
    

    的简写
    _alphabet = [[NSArray alloc] initWithObjects:@"a",@"b",@"c", ..., @"z", nil]; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多