0

君の力が必要。これらのデリゲート メソッドを AppDelegate.m に実装します。

    -(BOOL)application:(UIApplication *)application
           openURL:(NSURL *)url
 sourceApplication:(NSString *)sourceApplication
        annotation:(id)annotation {
    if (url != nil && [url isFileURL]) {
        //Valid URL, send a message to the view controller with the url
    }
    else {
        //No valid url
    }
    return YES;

しかし今、AppDelegate ではなく ViewController に URL が必要です。URL を「送信」する方法、またはこれらの Delegate メソッドを ViewController に実装する方法を教えてください。

4

2 に答える 2

12

NSNotificationCenter以下に示すように使用できます。

まず、アプリのデリゲートに通知を次のように投稿します。

NSDictionary *_dictionary=[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:[NSString stringWithFormat:@"%d",newIndex],nil] forKeys:[NSArray arrayWithObjects:SELECTED_INDEX,nil]];

[[NSNotificationCenter defaultCenter] postNotificationName:SELECT_INDEX_NOTIFICATION object:nil userInfo:_dictionary];

次に、この通知を監視するViewControllerを登録します

/***** To register and unregister for notification on recieving messages *****/
- (void)registerForNotifications
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(yourCustomMethod:)
                                                 name:SELECT_INDEX_NOTIFICATION object:nil];
}

/*** Your custom method called on notification ***/
-(void)yourCustomMethod:(NSNotification*)_notification
{
    [[self navigationController] popToRootViewControllerAnimated:YES];
    NSString *selectedIndex=[[_notification userInfo] objectForKey:SELECTED_INDEX];
    NSLog(@"selectedIndex  : %@",selectedIndex);

}

ViewDidLoad でこのメソッドを次のように呼び出します。

- (void)viewDidLoad
{

    [self registerForNotifications];
}

次に、UnLoad で、このメソッドを呼び出してこのオブザーバーを削除します。

-(void)unregisterForNotifications
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:SELECT_INDEX_NOTIFICATION object:nil];
}


-(void)viewDidUnload
{
    [self unregisterForNotifications];
}

お役に立てば幸いです。

于 2013-05-09T09:15:43.673 に答える