3

これは簡単に修正できることはわかっていますが、何らかの理由で他のソリューションで問題を修正しようとすると、うまくいきません。私のアプリでは、プッシュ通知を設定しましたtabBarItem。通知からアプリを開いたときに、特定のアプリを開く機能を設定しようとしています。これが私がこれまでに持っているコードです。正しい方法を使用しているかどうか教えてください。私はあまり経験していないAppDelegate.mので、完全に間違っている場合はご容赦ください。

AppDelegate.m

#import <CoreLocation/CoreLocation.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate,UITabBarControllerDelegate,CLLocationManagerDelegate>{

CLLocationManager *locationManager;
}


@property (strong, nonatomic) UIWindow *window;


@property(nonatomic,readonly) UITabBar *tabBar;
@property(nonatomic,strong) UITabBarController *tabBarController;
@end

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES;

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound)];


return YES;
}
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo{
/* this works just fine*/
NSLog(@"opening from a notification!!");
/*this is what doesnt work at all*/
self.tabBarController = [[UITabBarController alloc] init];
[self.tabBarController ];
self.tabBarController.selectedIndex = 3;
/*also when i do nslog the selectedIndex it gives me this value "2147483647"*/
NSLog(@"%i is the tabbar item",tabBarController.selectedIndex);
}
4

5 に答える 5

3

ログイン コントローラーからタブ バー コントローラーにプッシュするため、アプリ デリゲートからタブ バー コントローラーへの参照を取得する方法はありません。これは、プッシュされるまで存在しないためです。これを修正する方法は、アプリの構造を変更することです。現在の構造には何も問題はありませんが (クラッシュの原因となります)、ログイン コントローラーを最初に配置するのは好きではありません。 . タブ バー コントローラーをウィンドウのルート ビュー コントローラーにし、最初のタブのコントローラーの viewDidAppear メソッドからログイン コントローラーをアニメーションなしでモーダルに表示します。これにより、ログイン コントローラーがユーザーに最初に表示されます。ログインが完了したら、閉じるだけです。

この構造を使用する場合、私の提案を使用して、選択したインデックスを設定できます。

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo{
    NSLog(@"opening from a notification!!");
    self.tabBarController = self.window.rootViewController;
    self.tabBarController.selectedIndex = 3;
    NSLog(@"%i is the tabbar item",tabBarController.selectedIndex);
}
于 2013-08-20T05:23:05.467 に答える
1

これを試して

NSUInteger index = [self.tabBarController.tabBar.items indexOfObject:self.tabBarController.tabBar.selectedItem];    
NSLog(@"Index: %d", index);
于 2013-10-25T07:46:25.743 に答える