2010-06-04 62 views
0

我正在尝试将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]; 
} 

这是实际正确?它工作,但不优雅;一点也不。

+0

你能告诉我们你试过的代码和编译错误信息吗? – progrmr 2010-06-04 13:49:30

回答

1

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

解决方案:如果您只需在一个.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 
+0

我曾尝试使用extern但似乎收到$ non_lazy_ptr)。这个想法是在.h中声明int,然后在.m中使用它的三个独立函数(函数:一个函数初始化,一个迭代,一个检索索引。) – 2010-06-04 13:52:35

+0

顺便说一下,这只是公平的说只使用“int myInt”的作品,但我觉得这是不正确的。 – 2010-06-04 13:54:23

+0

@ Mr .:由于您试图将它放入'@ implementation'部分,'extern'将不起作用。这就是为什么他问'你是否在类的外部声明了整型和NSArray?' - 我认为你在你的例子中编写的代码是很好的,因为变量保持私有需要它。 – Senseful 2010-06-04 14:29:27

1

你写的代码是正确的,因为你要保留的变量为私有的可视性尽可能。在这种情况下,你似乎只需要XYZViewController.m文件中的这个变量。实际上,您可能需要考虑使用@private作为前缀,以使其他单位更难以看到它。

+0

我加了@private,这看起来好多了。谢谢你和其他人的帮助。 – 2010-06-04 14:38:58