在GLViewController.m文件中
在实施的最高层
NSArray* imageArray ;
然后在GLViewController 内的GLViewController.m中
- (id)initWithCoder:(NSCoder*)coder
{
imageArray = @[ @"baban.jpg",@"cete.jpg",@"cipan.jpg",@"kuc.jpg"];
}
GLViewController.m 中的内部drawView
NSLog(imageArray[0]); //Fails
我已经在GLViewController.h文件中声明了它:
NSArray* imageArray;
我正在GLViewController.m 中包含GLViewController.h
您的问题不清楚。例如,您是否已将imageArray
声明为实例变量、全局变量,或者可能同时声明为二者?"At the very top of Implementation"可以读作"top of file"、"top of Implementation just below@implementation
in brackets"等。
所以我们在猜测,希望它能有所帮助。
首先,根据你的报告;init运行,但in和实例方法访问实例变量以某种非指定的方式"失败";可能有两个不同的变量在不同的作用域中声明。如果没有一个最小的可重复的例子,我们就不能更具体。你可以尝试插入:
NSLog(@"Loc A imageArray @%p = %p", &imageArray, imageArray);
在不同的位置,将每个位置的"A"(更改为"B"、"C"…(,访问imageArray
。这将打印变量本身的地址,您可以从中确定是否总是引用同一变量,以及变量的内容作为地址,您也可以从中判断值是否在更改,即它是nil
还是它引用的数组已更改。
第二,您要写"我也在GLViewController.h文件中声明了它"。您通常不会在.h
文件中声明实例变量,尽管您可以,并且您不会在.h
中重新声明全局变量,这样做应该会产生编译器错误——您不会报告这样的错误,这会导致您可能在不同的作用域中有两个变量。
如果您希望在file.m
中声明一个全局变量,并让其他文件中的其他代码可以访问它,那么在file.h
中,您可以为它包含一个extern
声明:
extern NSArray* imageArray;
extern
声明此行不是声明变量本身,而是在其他地方声明变量并可访问。(您可能想知道为什么不将extern
添加到函数/方法中,在这种情况下,extern
是隐式的。(
希望这在某种程度上有所帮助。如果这根本没有帮助,我建议你问一个全新的问题,提供更多的细节,最少的可重复的例子,等等。(如果你现在编辑这个问题,人们可能会认为他们已经看到了这个问题而错过了编辑。(你可以随时删除这个问题,以减少混乱。