< Сильный > .h

@property (nonatomic, retain) NSArray *m_plistData;

< Сильный > .м

@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 может получать нормальные значения

0
Gaojian922188 30 Авг 2011 в 07:00

3 ответа

Лучший ответ

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];    
0
Mahesh 30 Авг 2011 в 03:17

Попробуйте что-нибудь вроде:

m_plistData = [array copy];
0
Daniel Pereira 30 Авг 2011 в 03:12

Сделайте это так, как у вас есть NSAarray:

if(array)
{
  m_plistData = [NSArray arrayWithArray:array];
}
0
kiritsuku 15 Ноя 2012 в 10:44