NSArray“超出范围”

时间:2011-08-30 03:00:29

标签: objective-c nsarray

·H

@property (nonatomic, retain) NSArray *m_plistData;

的.m

@synthesize m_plistData;
- (void)viewDidLoad
{   
    NSArray *array = [[NSArray alloc]initWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14", nil];    
    m_plistData = array;
    NSArray *nn = m_plistData;    
    [super viewDidLoad];    
}

我使用断点并发现数组是正常的,但是m_plistData没有值,显示“超出范围”,我无法理解为什么nn可以得到正常值

3 个答案:

答案 0 :(得分:0)

array是一个本地引用变量。它只持续到viewDidLoad方法。现在,

m_plistData = array;

上述声明不做深刻的复制。这只是一个浅薄的副本。

- (void)viewDidLoad
{   
    NSArray *array = [[NSArray alloc]initWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14", nil];    
    m_plistData = array;
    NSArray *nn = m_plistData;    
    [super viewDidLoad];    
} // Both the array, nn references cease to exist after this point.
  // So having references to it leads to run-time exception if used else where.

如果您的目标是m_plistData中的元素,请直接执行 -

m_plistData = [[NSArray alloc]initWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14", nil];    

答案 1 :(得分:0)

尝试类似:

m_plistData = [array copy];

答案 2 :(得分:0)

这样做,因为你有一个NSAarray

if(array)
{
  m_plistData = [NSArray arrayWithArray:array];
}
相关问题