开发者

Problem with Facebook params causing app to terminate - iphone

I am trying to post to Facebook from my iPhone app and it just doesn't work.

This is what I am doing:

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];

I also tried

[self.facebook dialog:@"feed" andParams:params andDelegate:self];

but in either case my app is getting terminated either in

  • (FBRequest*)openUrl:(NSString *)url params:(NSMutableDictionary *)params httpMethod:(NSString *)httpMethod delegate:(id)delegate

or in

  • (void)dialog:(NSString *)action andParams:(NSMutableDictionary *)params andDelegate:(id )delegate

depending on which method I call with this log:

* Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDi开发者_开发百科ctionary setObject:forKey:]: mutating method sent to immutable object'

It doesn't make sense to me because the dictionaries being used are mutable.

Am I doing something wrong? Any help would be much appreciated.


It doesn't make sense to me because the dictionaries being used are mutable.

No, they are not. Despite that you are assigning the returned object to a NSMutableDictionary variable, you are creating a NSDictionary here:

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];

This should be:

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

This is likely the cause of the crash:

  • Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'

because the Facebook API expects a mutable dictionary:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜