Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将viewController上的ASIHttpRequest用于UISplitviewController时出错_Iphone_Objective C_Ios6_Asihttprequest_Uisplitviewcontroller - Fatal编程技术网

Iphone 将viewController上的ASIHttpRequest用于UISplitviewController时出错

Iphone 将viewController上的ASIHttpRequest用于UISplitviewController时出错,iphone,objective-c,ios6,asihttprequest,uisplitviewcontroller,Iphone,Objective C,Ios6,Asihttprequest,Uisplitviewcontroller,我有一个UISplitViewController,它实现了一个masterNavigationController和一个detailNavigationController,基本来自XCode模板 masterNavigationController调用另一个名为“API”的NSObject,它反过来使用ASIHTTPRequest从服务器检索特定的JSON数据 在我接到请求的电话之前,一切都很好。它显示了iPad的图形用户界面,并在使用EXC\u BAD\u访问后立即崩溃。我收到的错误消息如

我有一个
UISplitViewController
,它实现了一个
masterNavigationController
和一个
detailNavigationController
,基本来自XCode模板

masterNavigationController
调用另一个名为“API”的
NSObject
,它反过来使用
ASIHTTPRequest
从服务器检索特定的JSON数据

在我接到请求的电话之前,一切都很好。它显示了iPad的图形用户界面,并在使用
EXC\u BAD\u访问
后立即崩溃。我收到的错误消息如下:

2012-10-10 21:13:42.357 myapp[24409:c07]Splitview控制器 预计将有一个视图 索引0处的控制器在使用之前

我尝试了不同的方法来解决这个问题,其中一种方法是在设置视图控制器后设置SplitViewController委托,另一种方法是使用NetworkQueue

这是主导航控制器的代码:

[...]
- (void)viewDidLoad
{
    [UIHelper setNavigationBackBackground:self.navigationController.navigationBar widePage:NO];
    [UIHelper setViewBackground:self.parentViewController.view widePage:NO];
    [UIHelper setTableViewStyle:self.tableView];

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.navigationItem.leftBarButtonItem = self.editButtonItem;

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
    self.navigationItem.rightBarButtonItem = addButton;

    API *api = [[API alloc] init];
    [api setDelegate:self];
    [api setDidFinishSelector:@selector(didFinish:)];
    [api getCommingRetrievals];
}
[...]
AppDelegate:

[...]
    MasterViewController *masterViewController = [[MasterViewController alloc] initWithStyle:UITableViewStylePlain];
    UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];

    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
    UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];

    masterViewController.detailViewController = detailViewController;

    self.splitViewController = [[UISplitViewController alloc] init];

    self.splitViewController.view.opaque = NO;
    self.splitViewController.view.backgroundColor = [UIColor clearColor];

    self.splitViewController.viewControllers = @[masterNavigationController, detailNavigationController];
    masterViewController.managedObjectContext = self.managedObjectContext;

    self.splitViewController.delegate = detailViewController;

    self.window.rootViewController = self.splitViewController;
    [self.window makeKeyAndVisible];
[...]
这是API对象的代码:

- (void)getCommingRetrievals
{
    [self getRetrievalsForDate:[NSDate date]];
}

- (void)getRetrievalsForDate:(NSDate*)date
{
    NSString *stringFromDate = @"";

    if (date != nil)
    {
        // Set date string
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyyMMdd"];
        stringFromDate = [formatter stringFromDate:date];
    }

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/bookings/%@", API_BASE_DOMAIN, stringFromDate]];
    [self callApi:url requestMethod:@"GET"];
}

#pragma mark - 
#pragma mark API methods

- (void)callApi:(NSURL*)url requestMethod:(NSString*)requestMethod
{
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setRequestMethod:requestMethod];
    [request setDelegate:self];
    [request setDidFinishSelector:@selector(requestFinished:)];
    [request setDidFailSelector:@selector(didFailWithError:)];
    [request startAsynchronous];
}

- (void)requestFinished:(ASIHTTPRequest *)request
{
    if (self.delegate && [self.delegate respondsToSelector:didFinishSelector]) {
        [self.delegate performSelector:didFinishSelector withObject:self];
    }
}
如果我注释掉行
[请求启动同步],应用程序不会崩溃


我在这里遗漏了什么,以及如何解决问题?

检查您的UISplitViewController是否已通过2个视图控制器

除此之外,还有一些习惯用语:

这应该在任何设置开始时进行:

[super viewDidLoad];
e、 g


并考虑使用另一个框架而不是ASI。这是一个死气沉沉的图书馆。AFNetworking、MKNetworkingKit或RESTKit是很好的替代品。

您对根控制器的定义是什么。
masterNavigationController
现在是根控制器,在UINavigationController(在AppDelegate中设置)中显示UITableViewController。请检查您的UISplitViewController是否已通过2个视图控制器。据我所知,它已通过。我在问题中添加了代码。我现在使用AFNetwork解决了这个问题。使用起来也更容易。Thnx!