【发布时间】:2021-12-12 21:47:20
【问题描述】:
我对 Objective-C 不是很擅长,所以这可能是一个简单的问题。我不明白为什么错误完成块中的最后一行导致异常:
- (void)sendInappropriateNewsfeedComment:(NSString *)comment newsfeedEventId:(NSString *)newsfeedEventId completion:(void (^)(NSString *, NSInteger))completion error:(void (^)(NSString *, NSInteger))error {
PAInappropriateNewsFeedRequest *inappropriateNewsfeedRequest = [[PAInappropriateNewsFeedRequest alloc] initWithComment:comment newsfeedEventId:newsfeedEventId];
[inappropriateNewsfeedRequest executeWithCompletionBlock:^(id obj) {
completion(@"SUCCESS", (NSInteger)1);
} error:^(NSError *e, id obj) {
NSString * message = [obj objectForKey:@"message"];
error(message, [obj integerForKey:@"code"]);
}];
}
我还附上了一个屏幕截图,显示“obj”对象有一个名为“code”的键,其类型为“(long)-1”。
声明错误块并将“-1”值传回调用站点的正确方法是什么?
【问题讨论】:
-
NSDictionary甚至回复integerForKey:吗?我很惊讶它本身并没有引发错误。这里的问题是,int、long、NSInteger等原始值不是对象(它们的内存是内联存储的,而不是在符合 Objective 的内存布局的堆分配对象中) C期望对象)。您需要使用模拟您的号码的对象,即NSNumber。
标签: ios objective-c