gpt4 book ai didi

ios - 使用推送转场时,主详细信息应用程序立即崩溃

转载 作者:行者123 更新时间:2023-11-29 03:47:42 24 4
gpt4 key购买 nike

首先,如果这在某种程度上是重复的帖子,请随时向我指出正确的帖子,因为经过几个小时的搜索后我还没有找到它。

我在我的应用程序中使用 MasterDetail viewController,在开发的第一周左右,除了默认值之外,没有其他 ViewVontrollers 或 segues。我编写了主要代码,并且主视图 Controller 和详细 View Controller 工作正常。一旦我从详细 View 中添加另一个带有推送转场的 VC,我的应用程序就会立即崩溃。这是错误:

***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因是“-[UINavigationController setPlayer:]:无法识别的选择器发送到实例...”,然后是一堆十六进制。

在AppDelegate.m中,如果我注释掉这一行:

rightViewController.delegate = rightViewController

然后应用程序将启动,推送转场将起作用,但现在,显然,如果我要在 MasterView 中选择一个单元格,它会崩溃并给出以下错误:

***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因是“-[UINavigationController selectedPlayer:]:无法识别的选择器发送到实例...”,然后是一堆十六进制。

以下是我认为相关的所有代码:

AppDelegate.m

#import "AppDelegate.h"
#import "LeftViewController.h"
#import "RightViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *leftNavController = [splitViewController.viewControllers objectAtIndex:0];
LeftViewController *leftViewController = (LeftViewController *)[leftNavController topViewController];
RightViewController *rightViewController = [splitViewController.viewControllers objectAtIndex:1];

Player *selectedPlayer = [[leftViewController preclears]objectAtIndex:0];
[rightViewController setPlayer:selectedPlayer];

leftViewController.delegate = rightViewController;
return YES;
}

- (void)applicationWillTerminate:(UIApplication *)application
{
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

@end

LeftViewController.m(部分)

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

[tableView deselectRowAtIndexPath:indexPath animated:YES];

//Re-fetch the feed from the Postgres Database when a user selects an entry

[JSONHTTPClient getJSONFromURLWithString:@"http://myurl" completion:^(NSDictionary *json, JSONModelError *err) {
NSError* error = nil;
_feed = [[PostgresFeed alloc] initWithDictionary:json error:&error];

//Print the data fethced to NSLog in JSON format

[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:nil userInfo:[[json objectForKey:@"player"] objectAtIndex:indexPath.row]];

}];

Player *selectedPlayer = [_players objectAtIndex:indexPath.row];

if (_delegate)
{
[_delegate selectedPlayer:selectedPlayer];
}
}

所以,我做错了什么,但我不知道它是什么。我已经做了很多谷歌搜索,但还没有找到答案。如果有人想知道,我是 iOS 和 Obj C 的新手,MasterDetail 应用程序基于 Ray Wenderlich 的 iPad SplitViews 教程。我还查看了 Scott Sherwood 的一些关于 segues 的教程,但没有找到任何答案。

如果需要更多代码,请告诉我。

最佳答案

错误信息

-[UINavigationController setPlayer:]: unrecognized selector ...

表示

RightViewController *rightViewController = [splitViewController.viewControllers objectAtIndex:1];

返回一个 UINavigationController 实例,而不是 RightViewController 实例预期的。解决方案取决于 View Controller 层次结构。您可能必须像左 View Controller 一样继续:

UINavigationController *rightNavController = [splitViewController.viewControllers objectAtIndex:1];
RightViewController *rightViewController = (RightViewController *)[rightNavController topViewController];

关于ios - 使用推送转场时,主详细信息应用程序立即崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17506147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com