一般来说,我对 FB SDK 和 iOS 开发很陌生。我正在尝试将 FBGraphUser 对象传递给应用程序委托,然后稍后在另一个视图中使用它。我的应用程序正确连接到 FB,然后在 loginview 中将 FBGraphUser 对象分配给 appDelegate。现在的问题是,当我转到另一个视图时,它不再检索它。
有谁知道为什么不工作?
我在 loginViewController.h 中的代码是
- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
user:(id<FBGraphUser>)user {
// here we use helper properties of FBGraphUser to dot-through to first_name and
// id properties of the json response from the server; alternatively we could use
// NSDictionary methods such as objectForKey to get values from the my json object
;
// setting the profileID property of the FBProfilePictureView instance
// causes the control to fetch and display the profile picture for the user
_loggedInUser = user;
[self saveFBuserToDB];
_appDelegate.loggedInUser = (id<FBGraphUser>) user;
// NSLog(@"%@",_appDelegate.loggedInUser);
}
直到这里它就像一个魅力。它连接到 FB 并在我执行 NSLOG 时从应用程序委托中检索对象......
现在......当我进入另一个视图时,用户不再设置
createExercisePopupViewController.h
#import <UIKit/UIKit.h>
#import "myGymAppDelegate.h"
@interface createExercisePopupViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
NSArray* routineName;
}
@property (retain,nonatomic) NSArray* routineName;
@property (strong,nonatomic) myGymAppDelegate *appDelegate;
和 createExercisePopupViewController.h
#import "createExercisePopupViewController.h"
@interface createExercisePopupViewController ()
{
NSManagedObjectContext *context;
}
@end
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_appDelegate=(myGymAppDelegate*)[[UIApplication sharedApplication] delegate];
NSLog(@"%@",_appDelegate.loggedInUser);
}
解决方案:
虽然@Borinschi Ivan 给出的答案是有效的
我发现了另一个解决方法,它不再使用应用程序委托来检索 fbgraph 用户并在我的所有其他视图中使用此方法。这将在彼此的视图中设置 fb 用户图在 viewdidload 中包含 [self fbConnect]
- (void) fbConnect {
if (FBSession.activeSession.isOpen) {
[[FBRequest requestForMe] startWithCompletionHandler:
^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *user,
NSError *error) {
if (!error) {
_loggedInUser = user;
}
}];
}
}