代码之家  ›  专栏  ›  技术社区  ›  Kevin

需要帮助将深度链接路由集成到Xcode项目Obj-C中的内容

  •  0
  • Kevin  · 技术社区  · 8 年前

    当我尝试将分支的深度链接路由添加到项目中的内容时,我有两个问题。

    1. 需要从数组中查找itemid。 目前,我正在主页中显示homePageArray中的项目列表。m、 当用户单击项目显示时,它会根据所选索引将它们重定向到ItemDetailPage。

      ItemDetailPage * itemDetailPageObj = [[ItemDetailPage alloc]initWithNibName:@"ItemDetailPage" bundle:nil];
      [itemDetailPageObj detailPageArray:homePageArray selectedIndex:tag];
      [self.navigationController pushViewController:itemDetailPageObj animated:YES];
      [itemDetailPageObj release];
      

    但由于参数是itemid,因此从深层链接。我需要在homePageArray中找到具有itemid的索引。但我不知道如何找到它。(在homePageArray中,每个项目都有名称、id和内容。)

    1. 我在AppDelegate中添加deeplink启动序列时遇到问题。m、 以下是分支机构深层链接的指示

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      
      // initialize the session, setup a deep link handler
       [[Branch getInstance] initSessionWithLaunchOptions:launchOptions
                        andRegisterDeepLinkHandler:^(NSDictionary *params, NSError *error) {
      NSString *itemid = [params objectForKey:@"itemid"];
      int tag = "index of homePageArray based on the above itemid";
      if (itemid) {
         ItemDetailPage * itemDetailPageObj = [[ItemDetailPage alloc]initWithNibName:@"ItemDetailPage" bundle:nil];
         [itemDetailPageObj detailPageArray:homePageArray selectedIndex:tag];
         [self.navigationController pushViewController:itemDetailPageObj animated:YES];
         [itemDetailPageObj release];
         }
      }
      

    问题是我无法启动self。AppDelegate中的navigationController。m、 所以我想知道上面的解决方法是什么。

    非常感谢。

    1 回复  |  直到 8 年前
        1
  •  1
  •   clayjones94    8 年前

    对于问题的第一部分,您可以使用

    NSUInteger i = [ homePageArray indexOfObject: itemid ];
    

    获取要查找的项目的索引。

    要回答将详细信息页面推送到导航视图控制器上的第二个问题,您不应该调用 self 因为在本例中它引用了AppDelegate。您应该需要获取对Homepage ViewController的引用,并调用类似

    [homepageVC.navigationController pushViewController:itemDetailPageObj animated:YES];
    

    有时,在不同的线程中执行UI更改会导致奇怪的行为,因此我建议在主线程中执行此操作。将此代码放入回调中。

    dispatch_async(dispatch_get_main_queue(),
                     ^{ 
        // Push view controller here
    })