使用NSArray创建NSObject

时间:2013-11-12 07:06:21

标签: ios objective-c nsarray nsobject

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

#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

2 个答案:

答案 0 :(得分: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对象,直到运行时。

答案 1 :(得分:0)

您可以将数组设为属性并对其进行初始化&#34; lazily&#34;:

@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];