如何在一个可以在不同类中访问的类中创建可变数组?

时间:2015-11-05 23:09:38

标签: objective-c

在Stephen Kochan的Objective-C第6版编程中,他说你可以创建一个指向数组的指针,但是我得到了Xcode错误。我的愿望是在一个类中创建一个可变数组,但能够在不同的类中访问它。这是我的简化代码,我在其中创建数组,然后尝试设置指向它的指针,然后返回值:

-(NSUInteger) makeArray {
    NSArray *members = [NSArray arrayWithObjects:@"Keith", nil];
    NSUInteger *membersPtr;
    membersPtr = members;
    return *monthNamesPtr;
}

我在第3行中遇到了两个错误(membersPtr = members; - 这是正确的,所以我认为自书写之后规则已经改变了)。错误是:

  

ARC不允许将Objective-C指针隐式转换为'NSUInteger'(又名'unsigned long *')

     

从NSArray * _strong'

分配给'NSUInteger *'(又名无符号long *')的指针类型不兼容

2 个答案:

答案 0 :(得分:1)

我想你可能想要这样做,它不会有任何错误

-(NSUInteger) makeArray {
    NSArray *members = [NSArray arrayWithObjects:@"Keith", nil];
    NSUInteger *membersPtr;
    membersPtr = (NSUInteger)members;
    return *membersPtr;
}

我认为 Singleton 是更好的方法! 你可以创建类并添加它:

+ (instancetype)sharedInstance
{
    static dispatch_once_t once;
    static id sharedInstance;
    dispatch_once(&once, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}

答案 1 :(得分:0)

我猜你是来自main背景,这就是为什么你试图通过服用NSUInteger来模拟main类的东西。让我简单解释一下:

main

这里C是一个指向NSArray对象(Objective-C集合类型)的指针,它包含" Keith"作为第一个收集项目。现在,如果需要将指针返回到此数组,只需将方法更改为:

int *ptr