我已經創建了一個類NSURLConnection的包裝類,並且類的用戶傳遞了在連接的各個階段被調用的塊。包裝類如下所示,爲了簡潔起見簡化:你如何讓一個塊成爲一個班級的成員?
typedef void (^ConnectionFinishedWithErrorBlock)(NSError* error);
@interface MYHTTPConnection : NSObject <NSURLConnectionDelegate>
@property (copy, nonatomic) ConnectionFinishedWithErrorBlock theErrorBlock;
@property (strong, nonatomic) NSURLConnection *connection;
- (void) establishConnectionForURL:(NSURL*) url
andConnectionFinishedWithErrorBlock: (ConnectionFinishedWithErrorBlock) errorBlock;
@end
到目前爲止,我已經使用它與聯聲明即
[self.httpConnection establishConnectionForURL: url
andConnectionFinishedWithErrorBlock:^(NSError* error)
{
...
}];
塊被但現在我有一個情況我有一個非常長的錯誤處理塊,並將其所有內聯代碼放在一起將會變得混亂(因爲API需要其他塊未在此處顯示)。
我知道我可以做這樣的事情:
void (^httpConnectionFinishedWithError)(NSError*) =
^(NSError* error)
{
}
然後傳遞到httpConnectionFinishedWithError establishConnectionForURL。但httpConnectionFinishedWithError包含對自我的調用。當聲明內聯塊時,對自我的調用是正確的,但在完成上述操作時不會發生這種情況,因爲顯然這會產生編譯錯誤。
所以我想知道是否/如何塊可以作爲調用類的塊屬性? (我之前已經將塊用作類的屬性,正如在上面的MYHTTPConnection類中所做的那樣,但在這種情況下,我無法獲得將傳遞給establishConnectionForURL的塊添加爲屬性的語法權限呼叫類)。
或者,httpConnectionFinishedWithError可以調用另一個函數,但在這種情況下,我不得不將自己作爲參數傳遞,在這種情況下如何獲得塊內的自我?
還有其他更優雅的解決方案嗎?
非常感謝
編輯: 更新,以顯示實例編譯錯誤的
void (^httpConnectionFinishedWithError)(NSError*) =
^(NSError* error)
{
self.boolProperty = NO; // here
}
«當塊被聲明爲內聯時,對自我的調用是正確的,但是當完成上述操作時不會發生這種情況,因爲顯然這會產生編譯錯誤。»這根本不清楚。你在做什麼工作?任何ObjC方法中都有一個有效的自我指針。如果你在類方法中,'self'指向類而不是實例 - 是問題所在? –
是的,它需要訪問實例屬性和方法。 – Gruntcakes
所以_你在做什麼? –