Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data CoreData UINavigationController managedObjectContext错误_Core Data_Uinavigationcontroller_Ios6_Uitabbarcontroller - Fatal编程技术网

Core data CoreData UINavigationController managedObjectContext错误

Core data CoreData UINavigationController managedObjectContext错误,core-data,uinavigationcontroller,ios6,uitabbarcontroller,Core Data,Uinavigationcontroller,Ios6,Uitabbarcontroller,我有一个项目,其中包括一个组合tabbarController和导航控制器。 对不起,因为我不能发布图片,图片链接在这里: 代理代码。h: #import <UIKit/UIKit.h> #import <CoreData/CoreData.h> @interface NAppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *win

我有一个项目,其中包括一个组合tabbarController和导航控制器。 对不起,因为我不能发布图片,图片链接在这里:

代理代码。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
在添加导航控制器之前,它可以正常运行。但当我添加此项时,会出现一个错误:

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

问题出在这一行:

TVC_TabProvince *controller = (TVC_TabProvince*) [arrController objectAtIndex:0];
[arrController objectAtIndex:0]
是选项卡栏控制器的第一个视图控制器,因此这是导航控制器,而不是
TVC\u选项卡控制器。类型转换
(TVC_TabProvince*)
不会更改对象,它仍然是一个导航控制器

因此,您必须添加一个步骤:

NSArray *arrController = [tabBarController viewControllers];
UINavigationController *navController = [arrController objectAtIndex:0];
TVC_TabProvince *controller = [navController. viewControllers objectAtIndex:0];
controller.managedObjectContext = self.managedObjectContext;
换一种方式可能更灵活:不必将托管对象上下文从应用程序委托“推”到表视图控制器,而是在需要时从表视图控制器“拉”它。所以在TVC_Tab省的某个地方,你知道吗

那么,表视图控制器在视图控制器层次结构中的位置就不再重要了。(但这只是一个建议。)

NSArray *arrController = [tabBarController viewControllers];
UINavigationController *navController = [arrController objectAtIndex:0];
TVC_TabProvince *controller = [navController. viewControllers objectAtIndex:0];
controller.managedObjectContext = self.managedObjectContext;
NAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
self.context = [appDelegate managedObjectContext];