Facebook 信息未填充 Parse 数据库

Posted

技术标签:

【中文标题】Facebook 信息未填充 Parse 数据库【英文标题】:Facebook information not populating Parse database 【发布时间】:2013-07-26 17:12:55 【问题描述】:

当用户在我的应用程序中通过 facebook 登录时,我会查询他们的照片和姓名,并使用该信息来填充 Core Data 和我的 Parse.com 后端。但是,它不起作用。这是做所有事情的代码:

#pragma mark - ()

- (IBAction)authButtonAction:(id)sender 
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

    // If the person is authenticated, log out when the button is clicked.
    // If the person is not authenticated, log in when the button is clicked.
    if (FBSession.activeSession.isOpen) 
        [appDelegate closeSession];
     else 
        // The person has initiated a login, so call the openSession method
        // and show the login UX if necessary.
        [appDelegate openSessionWithAllowLoginUI:YES];
        self.authButton.hidden = YES;
    


- (IBAction)toQuadAction:(id)sender 

    // Query to fetch the users name and picture
    NSString *query = @"SELECT name, username FROM user WHERE uid=me() ";

    // Set up the query parameter
    NSDictionary *queryParam = [NSDictionary dictionaryWithObjectsAndKeys:query, @"q", nil];
    // Make the API request that uses FQL
    [FBRequestConnection startWithGraphpath:@"/fql" parameters:queryParam HTTPMethod:@"GET"
                      completionHandler:^(FBRequestConnection *connection,
                                          id result,
                                          NSError *error) 
                          if (error) 
                              NSLog(@"Error: %@", [error localizedDescription]);
                           else 
                              NSLog(@"My name: %@", result[@"data"][0][@"name"]);
                              NSLog(@"My username: %@", result[@"data"][0][@"username"]);

                              //SAVE TO CORE DATA
                              AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
                              NSEntityDescription *user = [NSEntityDescription entityForName:@"User" inManagedObjectContext:appDelegate.managedObjectContext];
                              NSFetchRequest *getName = [[NSFetchRequest alloc] init];
                              [getName setReturnsObjectsAsFaults:NO];
                              [getName setEntity:user];
                              NSError *error;
                              NSMutableArray *currentUser = [[appDelegate.managedObjectContext executeFetchRequest:getName error:&error] mutableCopy];

                              //SAVE THE NAME TO CORE DATA
                              [currentUser[0] setName:result[@"data"][0][@"name"]];

                              //SAVE NAME AND PICTURE TO PARSE
                              PFQuery *query = [PFQuery queryWithClassName:@"Student"];
                              [query whereKey:@"email" equalTo:[currentUser[0] valueForKey:@"email"]];
                              [query getFirstObjectInBackgroundWithBlock:^(PFObject *users, NSError *error) 
                                  if (!users)
                                      NSLog(@"The first object request failed");
                                   else
                                      NSLog(@"grabbed the object");
                                      //SET THE NAME IN PARSE
                                      [users setObject:result[@"data"][0][@"name"] forKey:@"name"];
                                      //SET THE IMAGE IN PARSE
                                      NSString *URLString = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?width=235&height=385", result[@"data"][0][@"username"]];
                                      NSURL *picURL = [NSURL URLWithString:URLString];
                                      NSData *picData = [NSData dataWithContentsOfURL:picURL];
                                      PFFile *picture = [PFFile fileWithData:picData ];
                                      [users setObject:picture forKey:@"picture"];
                                      [users saveInBackground];
                                  
                              ];
                          
                          [self performSegueWithIdentifier:@"facebookToQuad" sender:sender];
                      ];
    

所以,有一个身份验证按钮。用户点击它并使用 Facebook 登录。然后出现另一个按钮,允许他们进入应用程序。当他们点击它时,我们会在他们的 Facebook 个人资料中查询图片和姓名,并将其添加到核心数据中,然后进行解析。但是,目前,这些存储系统都没有被填充。

【问题讨论】:

【参考方案1】:

使用更多的空格,并声明更多的实例变量。打开您的代码,以便您更轻松地找到问题。

例如,取出值 result[@"data"][0][@"name"] 并将其分配给它自己的局部变量。

在 CoreData 中对您的实体进行子类化,因此使用 setter 和 getter 更容易管理属性分配。

然后设置断点并检查代码的每一步。

【讨论】:

以上是关于Facebook 信息未填充 Parse 数据库的主要内容,如果未能解决你的问题,请参考以下文章

Ajax JSON.parse 不会填充所有数据

使用 Parse 登录 Facebook 不起作用

如何从 Facebook + Swift + Parse 获取封面照片

Facebook 登录 - 获取用户数据

解析 Facebook 登录未执行,PFDateFormatter 无法识别选择器

使用 Swift 使用 Parse 存储和保存 Facebook 数据