-1

我正在尝试创建一个 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
4

2 回答 2

2

您必须在方法中初始化对象,例如-(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 对象。

于 2013-11-12T07:14:35.750 回答
0

您可以使数组成为一个属性并“懒惰地”初始化它:

@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]; 
于 2013-11-12T09:08:45.150 回答