2013-05-09 1 views
0

У меня есть контроллер представления с именем SecondViewController, и когда пользователь выбирает, какая статья хочет читать, я хочу перейти в ThirdViewController и передать NSDictionary со сведениями о статье.iOS NSDictionary pass through function

- (void) touchButtonBlock:(NSInteger) select 
{ 

    NSLog(@"touchButtonBlock"); 
    NSDictionary *dict; 
    switch (select) { 
     case 0: 
     { 
      NSMutableDictionary *tmpDict = [[NSMutableDictionary alloc] init]; 
      NSMutableDictionary *val = [[NSMutableDictionary alloc] init]; 
      [val setObject:@"article360.html" forKey:@"page"]; 
      [val setObject:@"img.png" forKey:@"img"]; 
      [val setObject:@"art1" forKey:@"name"]; 

      [tmpDict setObject:val forKey:[NSNumber numberWithInt:0]]; 

      val = [[NSMutableDictionary alloc] init]; 
      [val setObject:@"article360.html" forKey:@"page"]; 
      [val setObject:@"img.png" forKey:@"img"]; 
      [val setObject:@"art2" forKey:@"name"]; 

      [tmpDict setObject:val forKey:[NSNumber numberWithInt:1]]; 

      dict = [NSDictionary dictionaryWithDictionary:tmpDict]; 

      //[tmpDict release]; 
      //[val release]; 
      break; 
     } 
    NSDictionary *immDict = [NSDictionary dictionaryWithDictionary:dict]; 

    ArticleSelectListViewController *selectorView = [[ArticleSelectListViewController alloc] initWithArticlesData:immDict]; 
    [self.navigationController pushViewController:selectorView animated:YES]; 
    [selectorView release]; 
} 

Здесь я Ассинг NSDicitionary:

- (id)initWithArticlesData:(NSDictionary *)data 
{ 
    self = [super initWithNibName:nil bundle:nil]; 
    if (self) 
    { 
     articles = data; 

    ... 
} 

Но в других функциях, которые называются после переменной статьи взаимодействия с пользователем, кажется, неправильно - она ​​не содержит мои данные.

Где я могу сделать ошибку?

ответ

2

Сделайте копию словаря, а затем назначьте его.

- (id)initWithArticlesData:(NSDictionary *)data 
    { 
     self = [super initWithNibName:nil bundle:nil]; 
     if (self) 
     { 
      articles = [data copy]; 

     ... 
    } 
0

ПЕРВЫЙ ВАРИАНТ

Используйте эту функцию ...

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil articles:(NSDictionary *)article 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) 
    { 
     self.articles = article; 
    } 
    return self; 
} 

Для нажимной использования этого ...

NSDictionary *immDict = [NSDictionary dictionaryWithDictionary:dict]; 

ArticleSelectListViewController *selectorView = [[ArticleSelectListViewController alloc] initWithNibName:@"ArticleSelectListViewController" bundle:nil articles:immDict]; 
[self.navigationController pushViewController:selectorView animated:YES]; 
[selectorView release];//FOR NON ARC 

ВТОРОЙ ВАРИАНТ

Просто используйте это ..

NSDictionary *immDict = [NSDictionary dictionaryWithDictionary:dict]; 

ArticleSelectListViewController *selectorView = [[ArticleSelectListViewController alloc] initWithNibName:@"ArticleSelectListViewController" bundle:nil]; 
selectorView.articles = immDict; 
[self.navigationController pushViewController:selectorView animated:YES]; 
[selectorView release];//FOR NON ARC