私はfriendsmashのFacebook の例から始めましたが、以前にスコアが設定されていない場合、スコアを取得することはできません。コードは以下です。これが呼び出された場合、単に FBRequestConnection で停止し、エラーや結果を生成せず、ブロック内でそれ以上のコードは実行されません。明らかにこれは受け入れられません。
最初に値を確認せずにスコアを投稿すると、問題なく投稿され、その値を正しく確認できます。スコアがまったく設定されていない場合、呼び出しが「ハング」することはないと思いますか、それともスコアをチェックせずに常に投稿する必要がありますか?
void FB_Controller::FB_SendScore(const int nScore)
{
// Make sure we have write permissions
FB_RequestWritePermissions();
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
[NSString stringWithFormat:@"%d", nScore], @"score",
nil];
NSLog(@"Fetching current score");
// Get the score, and only send the updated score if it's highter
[FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"%llu/scores", m_uPlayerFBID] parameters:params HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
if(error)
{
NSLog(@"ERROR getting score %@", error);
}
else if (result && !error) {
int nCurrentScore = [[[[result objectForKey:@"data"] objectAtIndex:0] objectForKey:@"score"] intValue];
NSLog(@"Current score is %d", nCurrentScore);
if (nScore > nCurrentScore) {
NSLog(@"Posting new score of %d", nScore);
[FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"%llu/scores", m_uPlayerFBID] parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
if(error)
{
NSLog(@"ERROR posting score %@", error);
}
else
NSLog(@"Score posted");
}];
}
else {
NSLog(@"Existing score is higher - not posting new score");
}
}
}];
// Send our custom OG
//FB_SendOG();
}