2

Facebook SDK を使用する iOS アプリがあります。3.2 から 3.5.1 にアップグレードした理由の 1 つは、摩擦のない友達リクエストを使用できるようにするためです。プロセスは次の場合に正常に機能します。

NSMutableDictionary* params =   [NSMutableDictionary dictionaryWithObjectsAndKeys:nil];

[FBWebDialogs presentRequestsDialogModallyWithSession:[FBSession activeSession]
                                                  message:[NSString stringWithFormat:@"I just posted an action - give me some points!"]
                                                    title:@"Get Points from your friends"
                                               parameters:params
                                                  handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
                                                      if (error) {
                                                          // Case A: Error launching the dialog or sending request.
                                                          NSLog(@"Error sending request.");
                                                      } else {
                                                          if (result == FBWebDialogResultDialogNotCompleted) {
                                                              // Case B: User clicked the "x" icon
                                                              NSLog(@"User canceled request.");
                                                          } else {
                                                              NSLog(@"Request Sent.");
                                                          }
                                                      }}];

しかし、友達キャッシュを追加するとすぐに (Facebook Web サイトからコピー/貼り付け):

    NSMutableDictionary* params =   [NSMutableDictionary dictionaryWithObjectsAndKeys:nil];



    FBFrictionlessRecipientCache *friendCache = [[FBFrictionlessRecipientCache alloc] init];
    [friendCache prefetchAndCacheForSession:nil];

    [FBWebDialogs presentRequestsDialogModallyWithSession:[FBSession activeSession]
                                                  message:[NSString stringWithFormat:@"I just posted an action - give me some points!"]
                                                    title:@"Get points from your friends"
                                               parameters:params
                                                  handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
                                                      if (error) {
                                                          // Case A: Error launching the dialog or sending request.
                                                          NSLog(@"Error sending request.");
                                                      } else {
                                                          if (result == FBWebDialogResultDialogNotCompleted) {
                                                              // Case B: User clicked the "x" icon
                                                              NSLog(@"User canceled request.");
                                                          } else {
                                                              NSLog(@"Request Sent.");
                                                          }
                                                      }}
     friendCache:friendCache];

アプリはダイアログを読み込みますが、[FBWebDialogInternalDelegate completeWithResult:url:error:] at FBWebDialogs.m:93: でクラッシュします。[X] ボタンをタップしてダイアログをキャンセルするか、リクエストを送信しようとするとします。

依存関係を追加したり、新しい方法でセッションを開始したり、https://developers.facebook.com/docs/tutorial/iossdk/upgrading-from-3.2- ~3.5/ ?

ありがとう。

4

2 に答える 2

8

この場合、間違いなく、friendCache をどこにも保持しておらず、FBWebDialogs がそれを使用しようとする前に (ダイアログが閉じられたときなどに) 解放されます。

friendCache をローカル変数ではなくクラスの ivar またはプロパティに移動すると、これは機能するはずです。

于 2013-05-08T16:44:59.303 に答える
1

プロジェクトでARCを有効にしても同じ問題が発生しました。

with ARC FBFrictionlessRecipientCache *friendCacheはメソッドの最後で自動解放されますが、Facebook SDK ではウィンドウの閉じる/送信/キャンセル ボタンを押すときに必要になります。

FBFrictionlessRecipientCache *friendCache変数を保持するには、プロパティまたはクラスの先頭に配置する必要があります。

@interface className ()
{
    FBFrictionlessRecipientCache *friendCache;
}
于 2014-01-10T10:32:42.057 に答える