Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c awakefromnib中的OBJ C填充数组-范围问题?_Objective C - Fatal编程技术网

Objective c awakefromnib中的OBJ C填充数组-范围问题?

Objective c awakefromnib中的OBJ C填充数组-范围问题?,objective-c,Objective C,我试图填充一个数组,从awakeFromNib调用。我的问题是,当我试图访问变量时,它不可见 以下是相关片段: -(id)returnHaiku { return [self getOne:[self getOne:five]] // doesn't know what "five" is... } - (void)awakeFromNib { [super awakeFromNib]; [self fillArrays]; } -(id)fillArra

我试图填充一个数组,从awakeFromNib调用。我的问题是,当我试图访问变量时,它不可见

以下是相关片段:

   -(id)returnHaiku
{
    return [self getOne:[self getOne:five]] // doesn't know what "five" is...
}

- (void)awakeFromNib

{
    [super awakeFromNib];
    [self fillArrays];  
}

-(id)fillArrays
{   
    NSArray *five=[NSArray arrayWithObjects: @"blustry zen buddhists",@"barking tiny dogs", @"closeted bigot", @"yowling alley cats",@"shrugging teenagers",@"piece of tangled string", @"ball of woolen yarn", @"big pile of garbage",  @"line of well-wishers", @"moldy piece of bread", @"middle manager", @"a terrified rat", @"whispering goofballs", @"various people", @"cross-dressing monkey", @"terrifying dolt", @"sneering idiot", @"grinning sycophant", @"hurtful sloganist",@"annoying haiku",@"hardened criminal",@"vile politician", @"lost generation", @"poetical crap",@"slimy strategist", @"fake conservative", @"old-style liberal",@"evil yuppie scum", @"proud midwesterner",@"artful panhandler",@"noisy spoiled brats",@"frustrated poseurs",nil];
    return five;
}

-(id)getOne:(NSArray *)myArray
{
    return [[myArray objectAtIndex:arc4random()%myArray.count]stringByAppendingString:@"\n"];
}

我很感激你能为这个新手提供的任何帮助。提前感谢。

five
不是实例变量,因此它仅在
fillArrays
中可见。您应该将
five
设置为实例变量。

five
不是实例变量,因此它仅在
fillArrays
中可见。您应该将
five
作为一个实例变量。

您的
fillArrays
方法是创建一个新的local
NSArray
,然后返回它。但是,您调用此方法的方式如下:

[self fillArrays];

问题是您完全忽略了返回值,这意味着您的数组正在堆栈帧之间的小空隙中丢失。

您的
fillArrays
方法是创建一个新的local
NSArray
,然后返回它。但是,您调用此方法的方式如下:

[self fillArrays];
问题是您完全忽略了返回值,这意味着您的数组在堆栈帧之间的小空隙中丢失了。

确定

回答我自己的问题,但也许这会帮助其他人

以下是相关代码,我最终得出的结论:

-(id)returnHaiku
{
    return [self getOne:five];
}

- (void)awakeFromNib

{
    [super awakeFromNib];

    [self fillArrays];  
}

-(void)fillArrays
{
//fill array declared in header file as an instance variable

//Note: it's using arrayWithObjects, a factory method, which I guess 
// autoreleases memory after the array is no longer needed...

five=[NSArray arrayWithObjects: @"blustry zen buddhists",@"barking tiny dogs", @"closeted bigot", @"yowling alley cats",@"shrugging teenagers",@"piece of tangled string", nil];

// and here's what I was missing!!
     [five retain];
}

-(id)getOne:(NSArray *)myArray
// returns random element from an array
{
    return [[myArray objectAtIndex:arc4random()%myArray.count]stringByAppendingString:@"\n"];
}
因此,我之前的问题显然涉及到没有保留我正在填充的数组。我猜它在被传递出该方法后立即被转储,因此不能用于从数组中拾取随机对象的后续方法

这很好。

好的

回答我自己的问题,但也许这会帮助其他人

以下是相关代码,我最终得出的结论:

-(id)returnHaiku
{
    return [self getOne:five];
}

- (void)awakeFromNib

{
    [super awakeFromNib];

    [self fillArrays];  
}

-(void)fillArrays
{
//fill array declared in header file as an instance variable

//Note: it's using arrayWithObjects, a factory method, which I guess 
// autoreleases memory after the array is no longer needed...

five=[NSArray arrayWithObjects: @"blustry zen buddhists",@"barking tiny dogs", @"closeted bigot", @"yowling alley cats",@"shrugging teenagers",@"piece of tangled string", nil];

// and here's what I was missing!!
     [five retain];
}

-(id)getOne:(NSArray *)myArray
// returns random element from an array
{
    return [[myArray objectAtIndex:arc4random()%myArray.count]stringByAppendingString:@"\n"];
}
因此,我之前的问题显然涉及到没有保留我正在填充的数组。我猜它在被传递出该方法后立即被转储,因此不能用于从数组中拾取随机对象的后续方法


这很好。

我试图通过在标题或其他地方声明它来实现这一点,但是如果我在一个地方声明它,然后尝试稍后填充它(在fillArrays方法中),我会遇到exec崩溃。我猜测是因为如果我不使用arrayWithObjects同时声明和填充,我的指针似乎指向一个随机的内存块。再一次,我在这方面是新手,但这似乎是正在发生的事情…它崩溃了,因为数组是自动释放的。您应该使用
alloc/initWithObjects:
而不是
arrayWithObjects:
arrayWithObjects被认为是一种“工厂”方法;我试图通过在头或其他地方声明它来实现这一点,但是如果我在一个地方声明它,然后尝试在以后填充它(在fillArrays方法中),我会得到一个exec崩溃。我猜测是因为如果我不使用arrayWithObjects同时声明和填充,我的指针似乎指向一个随机的内存块。再一次,我在这方面是新手,但这似乎是正在发生的事情…它崩溃了,因为数组是自动释放的。您应该使用
alloc/initWithObjects:
而不是
arrayWithObjects:
arrayWithObjects被认为是一种“工厂”方法;一个天生就和记忆打交道的人,或者我是这么理解的。。。那么,我可以如何处理返回的值呢?我不确定,因为我在一个方法(awakeFromNib)中调用该方法,该方法似乎没有返回任何内容(即,一个void)。在程序开始时填充数组的正确方法是什么?谢谢。啊。。。那么,我可以如何处理返回的值呢?我不确定,因为我在一个方法(awakeFromNib)中调用该方法,该方法似乎没有返回任何内容(即,一个void)。在程序开始时填充数组的正确方法是什么?谢谢