gpt4 book ai didi

iphone - 使用FBRequestConnection错误处理程序获取Facebook数据时出现问题

转载 作者:行者123 更新时间:2023-12-03 08:58:28 26 4
gpt4 key购买 nike

为了一次获取所有 friend 的详细信息,我使用了带有错误处理程序的FQL查询和FBRequestConnection将所有数据保存到数组中,即

- (void)fetchFriendDetails
{
NSString* query = [NSString stringWithFormat:@"SELECT uid,name,birthday_date,pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = 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)
{
NSArray *tempArray = [result valueForKey:@"data"];
NSMutableArray *tempArrayAbout = [NSMutableArray arrayWithArray:tempArray];
self.friendsDetailsArray = tempArrayAbout;
NSLog(@"details are %@",friendsDetailsArray);
}
}];
}

当用户单击同步按钮时,将执行上述方法,然后执行将数据保存到db的操作。但是我这里有一个问题!由于FBRequestConnection错误处理程序是一个回调函数,发生的事情是它最初没有执行,并且在第二次尝试时它进入并保存了所有 friend 数据并将其保存在 friendsDetailsArray 中,这是我的同步按钮 Action :
- (IBAction)syncSettings:(id)sender
{
if (self.remindBeforeDaysField.text.length != 0 && self.setTimeField.text.length != 0)
{
self.syncProgressHUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
self.syncProgressHUD.labelText = kSyncingBirthdays;
self.syncProgressHUD.detailsLabelText = kPleaseWait;
self.syncProgressHUD.mode = MBProgressHUDModeIndeterminate;
[self.navigationController.view addSubview:syncProgressHUD];
syncProgressHUD.delegate = self;
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
// Do the task in the background
[syncProgressHUD show:YES];
[self saveUpdateFriendDetails];
// Hide the HUD in the main thread
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
});
}
}

由于我对friendsDetailsArray遇到问题,因此我不得不将代码移至 viewDidLoad 方法,就保存数据而言,该方法对我来说效果很好。尽管如此,我不明白为什么我无法更新数据我可以通过日志查看所有条件,数组值,保存所有Facebook friend ID的集合。换句话说,我可以保存 friend 的详细信息,但无法更新它。

在调试时让我感到惊讶的是,我发现了一些疯狂的东西,我已经检索了所有Facebook friend ID(如果存在)并存储在NSMutableSet中,然后检查该条件是否包含我们的Facebook friend ID,我想我的数据库是否已经拥有Friends记录,那么条件应该是有效的,但是令人震惊的是,它没有经过验证,反之亦然,也就是说,如果条件集不包含我们的Facebook id ,这是我的示例实现代码:
-(void)saveUpdateFriendDetails
{
NSLog(@"reminder set values are %@",remindersSet);
NSLog(@"id is %@",facebookID);
if(updateIfExistSwitch.on && [remindersSet containsObject:facebookID])
{
//Do update stuff
}

else if(![remindersSet containsObject:facebookID])
{
//Do insertion stuff
}
}

以下是记录的输出以进行澄清:

正如我们在图像中可以看到的那样,我的Facebook ID存在于NSMutableSet中(即提醒集),我不知道为什么条件: if(updateIfExistSwitch.on && [remindersSet containsObject:facebookID])未通过验证:O

我也相信在viewDidLoad中编写代码根本不是解决方案的正确方法,正如谁知道的那样,用户可能会输入详细信息并快速单击同步按钮,而到 friend 详细信息的同步将不会发生。我已经测试了我想所有的东西都围绕一个地方旋转,即通过调试可以看到的FBRquestConnection错误处理程序不是第一次进入循环,而是第二次进入循环。

我希望首先执行获取 friend 详细信息操作,然后再将数据保存/更新到sqlite数据库中。

注意:saveUpdateFriendDetails是我保存或更新数据的方法,您可以在同步按钮操作中观察[self saveUpdateFriendDetails]行

谁能指导我?

提出了有用的建议,在此先感谢:)

最佳答案

我终于找到了解决方案,让我回答我自己的问题,以便有人可以从中受益。成功解决了两个问题:

-> [remindersSet containsObject:facebookID]条件失败,因为facebookID是以NSDecimal格式检索的,因此我们需要在检索字符串之前指定字符串格式。

->第二个问题是回调函数,由于它是一个回调函数,因此我们需要在提取详细信息并将其保存到数组后执行保存或更新操作。

希望这可以帮助一些人

谢谢 :)

关于iphone - 使用FBRequestConnection错误处理程序获取Facebook数据时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15876356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com