Facebook で正常にログインできます。Login ビューは UIViewController です。Parses のログイン機能にアクセスするには、
@interface LoginViewController : UIViewController <PFLogInViewControllerDelegate, PFSignUpViewControllerDelegate>
問題は、ログインに成功したら、ユーザーに PFQueryTableViewController を見てもらいたいということです。アプリはすべてリストに基づいているため、これにプッシュするのは理にかなっています。
私はこれを試しました:
- (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user
{
[self dismissViewControllerAnimated:YES completion:^{
NSLog(@"Successfully logged in.");
MyPFQueryTableViewController *controller = [[MyPFQueryTableViewController alloc] init];
//Not sure what to do here...
}];
}
もともと私はTableViewにプッシュしました。それ以来、そのコードを削除しましたが、率直に言って、どうやってそれを行ったのかわかりません。
しかし、UIViewController が一瞬表示された後、PFQueryTableViewController が表示されました。
それだけでなく、テーブルがナビゲーション コントローラーに埋め込まれていても、PFQueryTableViewController にはナビゲーション バーが表示されませんでした。
これが私のLoginViewController.mのコードです
#import "LoginViewController.h"
#import <Parse/Parse.h>
#import "MyPFQueryTableViewController.h"
@interface LoginViewController ()
@end
@implementation LoginViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
PFLogInViewController *login = [[PFLogInViewController alloc] init];
login.fields = PFLogInFieldsFacebook;
// Need to set the delegate to be this controller.
login.delegate = self;
login.signUpController.delegate = self; //signUpController is a property on the login view controller
[self presentModalViewController:login animated:NO];
// Do any additional setup after loading the view.
}
/*
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UINavigationController *navigationController = segue.destinationViewController;
MyPFQueryTableViewController *controller = (MyPFQueryTableViewController *)
navigationController.topViewController;
}
- (void)viewDidAppear:(BOOL)animated
{
MyPFQueryTableViewController *controller =
[[MyPFQueryTableViewController alloc] initWithClassName:@"Lists"];
[self presentViewController:controller animated:NO completion:nil];
}
*/
//Four delegation methods below.
- (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user
{
[self dismissViewControllerAnimated:YES completion:^{
NSLog(@"Successfully logged in.");
MyPFQueryTableViewController *controller = [[MyPFQueryTableViewController alloc] init];
//Not sure what to do here...
}];
}
セグエメソッドを使用する必要があるのではないかと思いましたが、よくわかりません。
アップデート:
以下の回答に従って、 MyPFQueryTableViewController.m ファイルの presentModalViewController を介してログインをプッシュしようとしています。
- (void)viewDidLoad {
[super viewDidLoad];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
PFLogInViewController *login = [[PFLogInViewController alloc] init];
login.fields = PFLogInFieldsFacebook;
login.delegate = self;
login.signUpController.delegate = self;
[self presentModalViewController:login animated:NO];
//self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
私が受け取っている警告については、以下のコメントを参照してください。