2013-05-09 96 views
0

我有我的視圖控制器名爲SecondViewController,當用戶選擇哪篇文章想要閱讀時,我想導航到ThirdViewController並傳遞NSDictionary與文章數據。iOS NSDictionary通過函數傳遞

- (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]; 
} 

在這裏,我assing 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