2012-12-26 39 views
2

我將ID從UITABLEVIEWCONTROLLER傳遞給另一個UITABLEVIEWCONTROLLER,但它會拋出以下錯誤。將值傳遞到目的地控制器

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITabBarController setCityId:]: unrecognized selector sent to instance 0x75225e0' 
這裏

我們prepareForSegue功能:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"cityPushToTab"]) { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     featuredViewController *destViewController = segue.destinationViewController; 
     destViewController.cityId = [productKeys objectAtIndex:indexPath.row]; 
    } 

} 

功能之前做過好我打電話功能的控制器的cityId。我嘗試登錄能夠打印正確值的productKeys,但當我嘗試將值分配給目標視圖控制器對象時,它正在終止。請幫忙。

+0

我有一個tabcontroller在目的地有4個選項卡,每個都有自己的.m和.h文件,我需要cityId爲他們所有。 – MIrfan

回答

1

您確定destViewController屬於featuredViewController?我相信它不是。崩潰日誌告訴它是UITabBarController

我推薦的是創建一個繼承自UITabBarController的類。我會叫它MyTabBarViewController。將故事板中標籤欄控制器的類設置爲這個新類。

MyTabBarViewController.h,創建一個屬性:

@property (nonatomic, strong) id cityId; 

(注意cityId可以是任何你需要的類型,例如的NSStringNSNumber ...)。

然後,更改您的prepareForSegue代碼:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"cityPushToTab"]) { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     MyTabBarViewController *destViewController = segue.destinationViewController; 
     destViewController.cityId = [productKeys objectAtIndex:indexPath.row]; 
    } 
} 

接下來,在4視圖控制器,在你的標籤欄的.m文件,您可以使用此代碼訪問cityId

// Cast the viewcontroller's tab bar to your class 
MyTabBarViewController *tabBarController = (MyTabBarViewController*)self.tabBarController; 

// Access your property 
id cityId = tabBarController.cityId; 
// You can test to see if it works by casting to an NSString and NSLog it 
NSString *cityIdString = (NSString*) tabBarController.cityId; 
NSLog (@"%@", cityIdString);