0

tabbarController と Navigation Controller を組み合わせたプロジェクトがあります。申し訳ありませんが、画像を投稿できないため、画像のリンクは次のとおりです。

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'
4

1 に答える 1

1

問題は次の行にあります。

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

[arrController objectAtIndex:0]はタブ バー コントローラーの最初のビュー コントローラーであるため、これはナビゲーション コントローラーであり、コントローラーではありませんTVC_TabProvince。型キャスト(TVC_TabProvince *)はオブジェクトを変更せず、ナビゲーション コントローラーのままです。

したがって、1 つのステップを追加する必要があります。

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

その後、テーブル ビュー コントローラーがビュー コントローラー階層のどこにあるかは問題ではなくなります。(しかし、それは単なる提案です。)

于 2012-11-10T14:11:12.100 に答える