从数组中获取元素时遇到问题
我已全局声明NSArray *数组,也尝试通过myfile.h文件属性,但我无法访问视图控制器setCode方法中的数组元素。
NSArray *array;
//this is global array also i tried in my.h file
//@property(nonatomic, retain) NSArra *array;
//and by accessing it @synthesize array; also not works for me.
-(void)viewDidLoad
{
array = [NSArray arrayWithObjects:@"sssss", @"hjjjjj", @"kkkkkk"];
[self setCode];
}
-(void)setCode
{
NSString *code = [array objectAtIndex:0];
NSLog(@"code %@",code);
}
@end
它引发了一些错误:
2013-08-05 16:25:28.429 test_project_ios_31st_july[2409:c07] -[__NSMallocBlock__ objectAtIndex:]: unrecognized selector sent to instance 0x9c82350
2013-08-05 16:25:28.430 test_project_ios_31st_july[2409:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSMallocBlock__ objectAtIndex:]: unrecognized selector sent to instance 0x9c82350'
*** First throw call stack:
(0x23fb012 0x1c98e7e 0x24864bd 0x23eabbc 0x23ea94e 0x283f 0x17594f9 0x24550c5 0x23afefa 0x168dbb2 0x16a0e6b 0xdb9f 0x16d2417 0x16ebb24 0x16a0d60 0x174da8a 0x43ac2 0x16d2417 0x16ebb24 0x16a0d60 0x174da8a 0x464d5 0x17594f9 0x24550c5 0x23afefa 0x16a0a0c 0xa3d0e6 0x206353f 0x2075014 0x20657d5 0x23a1af5 0x23a0f44 0x23a0e1b 0x2ad87e3 0x2ad8668 0xbdcffc 0x2192 0x20c5)
libc++abi.dylib: terminate called throwing an exception
答案 0 :(得分:1)
您要从array
内的viewDidLoad
声明另一个对象,因此您的全局array
对象永远不会被分配,您需要删除声明,如下所示:
-(void)viewDidLoad
{
array = [NSArray arrayWithObjects:@"sssss", @"hjjjjj", @"kkkkkk"];
int i;
[self setCode];
}
顺便说一句,setCode
不做任何事情而不是打印!,您可以将其名称更改为printCode
。
答案 1 :(得分:1)
请尝试以下代码:
NSArray *array;
-(void)viewDidLoad
{
array = [NSArray arrayWithObjects:@"sssss", @"hjjjjj", @"kkkkkk"];
[array retain];
[self setCode];
}
-(void)setCode
{
NSString *code = [array objectAtIndex:0];
NSLog(@"code %@",code);
[array release];
}
@end
答案 2 :(得分:0)
添加
@interface PeopelListViewController : UIViewController
{
NSArray *array;
}
//在my.h文件中 // @ property(非原子,保留)NSArra *数组;
//和@synthesize数组;
只需要将nil
放在NSArray的末尾。
如
self.array = [NSArray arrayWithObjects:@"sssss", @"hjjjjj", @"kkkkkk", nil];
答案 3 :(得分:0)
你所做的是创建一个引用 - 本地,在这个方法中。
-(void)viewDidLoad
但在您的-(void)setCode
方法中,您正在访问全局变量。
全局变量尚未分配内存,因此未初始化错误。
因此,您需要了解scope of variables.
本地范围优先于全局范围。无论如何,你正在使用两个不同的数组对象。
在viewDidload
实施中进行更改以使其正常工作:
// No NSArray at front that will make it an another array object
array = [NSArray arrayWithObjects:@"sssss", @"hjjjjj", @"kkkkkk"];
答案 4 :(得分:0)
首先在实现(.m文件)中声明一个数组,如下所示
@implementation : myviewcontroller {
NSArray *array;
}
然后将其初始化为
array = [NSArray arrayWithObjects:@"sssss", @"hjjjjj", @"kkkkkk", nil];
必须有效