创建全局数组&迭代器

时间:2010-06-04 13:28:05

标签: objective-c

我试图将整个NSManagedObjects数组加载到NSArray中,然后使用整数迭代器在点击按钮时遍历数组。 xCode似乎不喜欢在.h中声明整数和NSArray,然后在.m中使用不同的方法。

我想知道经验丰富的开发人员在解决此类问题时应采取的适当方法。

流程将是: 1.将数据加载到数组中。 2.使用索引0处的信息设置标签.int i = 0; 3.用户点击按钮; i ++,检索索引1处的元素。

等等,直到数组结束,或者用户停止点击按钮。

编辑:

这是可行的代码,但我觉得不对:

XYZViewController.h

@interface XYZViewController : UIViewController <NSFetchedResultsControllerDelegate>{
    int index;  
}

XYZViewController.m

import "XYZViewController.h"

- (void)function1{
    index = 0;
}

- (void)function2{
    index++;
}

-(void)function3{
    NSManagedObject *obj = [results objectAtIndex:index];
}

这实际上是对的吗?它有效但不优雅;完全没有。

2 个答案:

答案 0 :(得分:1)

你是否在类外的.h文件中声明了整数和NSArray?如果是这样,它将在包含该文件的每个编译模块中定义,这导致链接时的多个符号=&gt;错误。

解决方案:如果只需要一个.m文件中的NSArray / int,请将它们移动到那里。否则在.h中将它们声明为extern,并在正好1 .m文件中定义它们,如下所示:

// 1.h
extern int myInt;

// 1.m
#include "1.h"
int myInt;
// Use myInt

// 2.m
#include "1.h"
// Use myInt

答案 1 :(得分:1)

您编写的代码是正确的,因为您希望尽可能保持变量的可见性。在这种情况下,您似乎只需要XYZViewController.m文件中的此变量。实际上,您可能需要考虑使用@private作为前缀,以使其对其他单位更不可见。