0

我有一個項目,其中包括一個組合tabbarController和導航控制器。 對不起,becauce我不能發佈圖片,圖像,這裏的鏈接:CoreData UINavigationController managedObjectContext錯誤

http://s12.postimage.org/58lbzzxm5/Screen_Shot_2012_11_10_at_9_56_07_AM.png

代碼NAppDelegate.h:

#import <UIKit/UIKit.h> 
#import <CoreData/CoreData.h> 

@interface NAppDelegate : UIResponder <UIApplicationDelegate> 

@property (strong, nonatomic) UIWindow *window; 

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator  *persistentStoreCoordinator; 

- (void)saveContext; 
- (NSURL *)applicationDocumentsDirectory; 

@end 

代碼NAppDelegate.m:

#import "NAppDelegate.h" 
#import "TVC_TabProvince.h" 

@implementation NAppDelegate 
@synthesize managedObjectContext = _managedObjectContext; 
@synthesize managedObjectModel = _managedObjectModel; 
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 

    NSArray *arrController = [tabBarController viewControllers]; 
    TVC_TabProvince *controller = (TVC_TabProvince*) [arrController objectAtIndex:0]; 
    controller.managedObjectContext = self.managedObjectContext; 

    return YES; 
} 

在添加導航控制器之前,它運行沒有任何問題。但是,當我添加此,錯誤出現:

error: 
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '- 
[UINavigationController setManagedObjectContext:]: unrecognized selector sent to 
instance 0x74b26b0' 

回答

1

的問題是在這條線:

TVC_TabProvince *controller = (TVC_TabProvince*) [arrController objectAtIndex:0]; 

[arrController objectAtIndex:0]是標籤欄控制器的第一視圖控制器,所以這是導航控制器而不是TVC_TabProvince控制器。類型轉換(TVC_TabProvince *)不改變對象,它仍然是一個導航控制器。

所以,你需要增加一個步驟:

NSArray *arrController = [tabBarController viewControllers]; 
UINavigationController *navController = [arrController objectAtIndex:0]; 
TVC_TabProvince *controller = [navController. viewControllers objectAtIndex:0]; 
controller.managedObjectContext = self.managedObjectContext; 

這可能是更靈活的周圍走另一條路:而不是「推」的管理對象從應用程序委託表視圖控制器上下文的,您需要時從桌面視圖控制器「拉」它。因此,在「TVC_TabProvince.m」的地方你做

NAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
self.context = [appDelegate managedObjectContext]; 

那麼它不會再在表視圖控制器是在視圖控制器的層次結構關係。 (但這只是一個建議。)

+0

非常感謝你! –

相關問題