我對 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”值傳遞回呼叫站點的正確方法是什么?
uj5u.com熱心網友回復:
僅僅是因為NSDictionary沒有呼叫方法integerForKey。這就是“無法識別的選擇器”的意思。選擇器基本上是一個方法名稱。
這甚至可以編譯的事實是由id用于引數型別引起的。您可以呼叫任何內容,id但如果該方法不存在,它會使您的應用程式崩潰。您應該obj盡快轉換為正確的型別。
NSDictionary *dictionary = (NSDictionary *) obj;
NSString *message = dictionary[@"message"];
NSNumber *code = dictionary[@"code"];
如果obj可以是不同的型別,則應確保[obj isKindOfClass:NSDictionary.self]在鑄造前進行檢查。
uj5u.com熱心網友回復:
考慮到 Sulthan 的建議的整個解決方案可能看起來像這樣
typedef void (^NewFeedCompletion)(NSString *, NSInteger);
typedef void (^NewsFeedError)(NSString *, NSInteger);
- (void) sendInappropriateNewsfeedComment: (NSString *)comment
newsfeedEventId: (NSString *)newsfeedEventId
completion: (NewFeedCompletion) completion
error: (NewsFeedError) error
{
PAInappropriateNewsFeedRequest *inappropriateNewsfeedRequest = [[PAInappropriateNewsFeedRequest alloc] initWithComment:comment newsfeedEventId:newsfeedEventId];
[inappropriateNewsfeedRequest executeWithCompletionBlock: ^(id obj) {
completion(@"SUCCESS", (NSInteger)1);
} error:^(NSError *e, id obj) {
assert([obj isKindOfClass: NSDictionary.class])
NSDictionary *errorDictionary = (NSDictionary *) obj;
NSString *message = [errorDictionary objectForKey: @"message"];
NSNumber *code = [errorDictionary objectForKey: @"code"]
error(message, [code integerValue]);
}];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/339609.html
下一篇:如何減少MSAA記憶體使用量?
