2

我在「HeroListViewController」中創建了NSMutale數組。我想在另一個viewController中使用它,它是MapTutorialViewController。我試過這樣。如何將一個NSMutableArray傳遞給另一個ViewController類

在HeroListViewController.h

MapTutorialViewController *maptutorialcontroller; 
NSMutableArray *listData; 

的屬性和在HeroListViewController.m正確合成它們

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    listData = [[NSMutableArray alloc] init]; 
    } 

- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *HeroTableViewCell = @"HeroTableViewCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:HeroTableViewCell]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:HeroTableViewCell] autorelease]; 
} 
NSManagedObject *oneHero = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
NSInteger tab = [tabBar.items indexOfObject:tabBar.selectedItem]; 
switch (tab) { 
    case kByName: 
     cell.textLabel.text = [oneHero valueForKey:@"name"]; 
     cell.detailTextLabel.text = [oneHero valueForKey:@"secretIdentity"]; 
     break; 
    case kBySecretIdentity: 
     cell.detailTextLabel.text = [oneHero valueForKey:@"name"]; 
     cell.textLabel.text = [oneHero valueForKey:@"secretIdentity"]; 
    default: 
     break; 
} 

     [listData addObject: [oneHero valueForKey:@"secretIdentity"]]; 


     count=[listData count]; 
       printf("No of items of listData:%u\n", count); 


if(maptutorialcontroller==nil){ 
     maptutorialcontroller= [[MapTutorialViewController alloc]initWithNibName:@"MapTutorialViewController" bundle:nil]; 
maptutorialcontroller.secondarray=listData; 
} 
count=[maptutorialcontroller.secondarray count]; 
printf("No of items of seconarray :%u\n", count); 

return cell; 

}

輸出:沒有的ListData的項目:3 沒有seconarray的項目:3 //都是正確

但這個問題我有,當我嘗試在MapTutorialViewController.h

HeroListViewController *heroviewcontroller; 
    NSMutableArray *secondarray; 

使用secondarray在「MapTutorialViewController」像這樣, 設置屬性和正確合成它們

在MapTutorialViewController.m

- (void)viewDidLoad 
    { 
    heroviewcontroller = [[HeroListViewController alloc]initWithNibName:@"HeroListViewController" bundle:nil]; 
    self.secondarray=[heroviewcontroller.listData mutableCopy]; 
    //secondarray= heroviewcontroller.listData; 
int count; 
count = [secondarray count]; 
// 
    printf("No of items of secondarray from MapTutorialViewContriller :%u\n", count); 
    } 

OUT PUT:沒有secondarray的項目從MapTutorialViewContriller:0
爲什麼是0

什麼錯我的代碼,請幫我

+0

它不能像上面那樣完成,因爲當你將init分配給viewcontroller時,只有你在HeroListViewController的init函數中初始化它們 – user784625

回答

2

firstviewcontroller .h file 

     before @interface 

     use @class secondViewcontroller; 


declare this inside of @interface with 

     secondViewcontroller *sVC; 


then in firstViewController.m file 

     before @implementation   

    #import "secondViewcontroller.h" 

then 
------------------- 

secondVC.h file 

     @interface inside declare this 

     say NSMutableArray *secondarray; 

     and sythasize them. 

------------------- 

after this 

     in firstViewcontroller.h viewdidload create this sVC by alloc and initwithnibname then 

     sVC.secondArray=urfirstArray; 

     now while u push this sVC controller to navigation controller u can nslog this array in viewdidload. 
+0

請格式化代碼。謝謝。 –

+0

ok.sure .......... thanku –

+0

@madhu,非常感謝您的幫助。我會試試看。 – sajaz

0

這怎麼陣列被內HeroListViewController產生的?在這種方法中,您正在創建一個HeroListViewController的新實例並嘗試從中獲取屬性。如果你已經在內存中有一個HeroListViewController,這是完全錯誤的。

爲此viewDidLoad方法創建類的屬性。它應該是NSMutableArray類型。當你分配和初始化這個類時,從HeroListViewController調用它[set myArray:heroListArray]。這應該讓你訪問它。

+0

我像這樣創建了NSMutableArray,並設置了屬性。 ** NSMutableArray * listData; ** ** @ property(nonatomic,retain)NSMutableArray * listData; **請給我一些代碼幫助。因爲我對iPhone的開發很陌生。高度欣賞它。 。 。 – sajaz

1

這隻有在您創建並在init方法中填充可變數組時纔有效。

你應該考慮授權和/或通知。

+0

@ dasdom,你可以給我一些代碼幫助。因爲我對iPhone的開發很陌生。高度欣賞它。 。 。 – sajaz

0

我假設你有一個包含這個新的觀點和主人公列表視圖的視圖。如果是這樣的話,那麼你可以創建新的視圖屬性,像這樣:

@property (nonatomic,retain)HeroListViewController *heroListViewController; 

,然後將其設置爲從外部heroList:

newView.heroListViewController = HeroListViewController; 

的主要問題與你現在的代碼是你使用alloc init創建了一個HeroListViewController的新實例,並且你沒有訪問同樣的東西。通過設置新視圖的heroListViewController屬性,可以訪問正確的viewController。

最後,在新視圖的viewDidLoad中 - 我居然把在viewWillAppear中的代碼:(BOOL)動畫 - 你可以把代碼相匹配的陣列。

注意,這整個這樣做的方式是凌亂的,可以使用單個類來做得更好,如果你需要訪問多個地方的數組。上面的代碼可以幫助你快速的工作,但是如果你想要一個非常乾淨的修補程序,可以到這裏:http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/24135-singleton-classes.html

相關問題