Проблема с параметрами Facebook, вызывающая завершение работы приложения - iphone - PullRequest
0 голосов
/ 17 августа 2011

Я пытаюсь опубликовать в Facebook из своего приложения для iPhone, но оно просто не работает.

Это то, что я делаю:

if (![_facebook isSessionValid])
    {
        NSArray *permissions =  [NSArray arrayWithObjects:
                                 @"read_stream", @"publish_stream", @"offline_access",nil];

        [facebook authorize:permissions delegate:self];
    }

    NSMutableDictionary* params = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"User Prompt Message",  @"user_message_prompt",
                            @"http://www.mywebsite.com/", @"link",
                            @"http://mywebsite.com/wp-content/uploads/2011/05/iTunesArtwork.png", @"picture",
                            nil];


    [facebook requestWithGraphPath:@"me/feed"
                         andParams:params  
                     andHttpMethod:@"POST" 
                       andDelegate:self];

Я также пытался

[диалоговое окно self.facebook: @ "feed" andParams: params andDelegate: self];

, но в любом случае мое приложение завершается либо в

  • (FBRequest *) openUrl: (NSString *) url params: (NSMutableDictionary *) params httpMethod: (NSString *) делегат httpMethod: (id) делегат

илив

  • (void) диалоговое окно: (NSString *) action andParams: (NSMutableDictionary *) params иDelegate: (id) делегат

в зависимости откакой метод я вызываю с помощью этого журнала:

* Завершение приложения из-за необработанного исключения 'NSInternalInconsistencyException', причина: '- [__ NSCFDictionary setObject: forKey:]: метод мутации отправлен внеизменный объект '

Это не имеет смысла для меня, потому что используемые словари являются изменяемыми.

Я что-то не так делаю?Любая помощь будет высоко ценится.

1 Ответ

2 голосов
/ 17 августа 2011

Это не имеет смысла для меня, потому что используемые словари изменчивы.

Нет, это не так. Несмотря на то, что вы присваиваете возвращенный объект переменной NSMutableDictionary, вы создаете NSDictionary здесь:

NSMutableDictionary* params = [NSDictionary dictionaryWithObjectsAndKeys:
                                    ^
                                  Here!
                              @"User Prompt Message",  @"user_message_prompt",
                              @"http://www.mywebsite.com/", @"link",
                              @"http://mywebsite.com/wp-content/uploads/2011/05/iTunesArtwork.png", @"picture",
                              nil];

Это должно быть:

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:...];

Это, вероятно, причина сбоя:

  • Завершение приложения из-за необработанного исключения 'NSInternalInconsistencyException', причина: '- [__ NSCFDictionary setObject: forKey:]: метод мутирования, отправленный неизменяемому объекту '

потому что API Facebook ожидает изменяемый словарь:

- (FBRequest*)requestWithGraphPath:(NSString *)graphPath
                         andParams:(NSMutableDictionary *)params
                                            ^
                                 It needs to be mutable!
                     andHttpMethod:(NSString *)httpMethod
                       andDelegate:(id <FBRequestDelegate>)delegate;
...