Facebook params问题导致应用程序终止 - iphone

时间:2011-08-17 12:36:51

标签: iphone facebook facebook-graph-api nsmutabledictionary

我正试图从我的iPhone应用程序发布到Facebook,它只是不起作用。

这就是我在做的事情:

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 dialog:@“feed”andParams:params andDelegate:self];

但在任何一种情况下,我的应用程序都会在

中终止
  
      
  • (FBRequest *)openUrl:(NSString *)url              params:(NSMutableDictionary *)params          httpMethod:(NSString *)httpMethod            代表:(ID)代表
  •   

  
      
  • (void)对话框:(NSString *)动作    andParams:(NSMutableDictionary *)params andDelegate:(id   )代表
  •   

取决于我使用此日志调用的方法:

  

* 由于未捕获的异常而终止应用   'NSInternalInconsistencyException',原因:' - [__ NSCFDictionary   setObject:forKey:]:发送到不可变对象'

的mutating方法

对我来说没有意义,因为使用的词典是可变的。

我做错了吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

  

对我来说没有意义,因为使用的词典是可变的。

不,他们不是。尽管您将返回的对象分配给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:]:发送到不可变对象的变异方法'
  •   

因为Facebook API需要一个可变字典:

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