XCodeテンプレートの基本的なaとaをUISplitViewController
実装するがあります。masterNavigationController
detailNavigationController
masterNavigationController
呼び出しはNSObject
「API」と呼ばれるもう1つの呼び出しASIHTTPRequest
で、サーバーから特定のJSONデータを取得するために使用されます。
私がリクエストからの呼び出しを開始するまで、すべてがうまくてダンディです。iPadのGUIを表示し、直後にクラッシュしEXC_BAD_ACCESS
ます。私が受け取るエラーメッセージは次のとおりです。
2012-10-10 21:13:42.357 myapp [24409:c07] Splitviewコントローラーは、使用される前にインデックス0にビューコントローラーを持っていると予想されます。
この問題を解決するためにさまざまなことを試みました。1つはビューコントローラーの設定後にSplitViewControllerデリゲートを設定することであり、もう1つは代わりにNetworkQueueを使用することです。
これは:のコードmasterNavigationController
です
[...]
- (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];
}
}
行をコメントアウトしても[request startAsynchronous];
、アプリはクラッシュしません。
ここで何が欠けていますか、どうすれば問題を解決できますか?