我创建了一个类,它是 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 来建立ConnectionForURL。但是 httpConnectionFinishedWithError 包含对 self 的调用。当块被声明为内联时,对 self 的调用很好,但在如上所述完成时则不行,因为显然这会产生编译错误。
所以我想知道该块是否/如何成为调用类的块属性?(我之前已经使用块作为类的属性,就像在上面的 MYHTTPConnection 类中所做的那样,它工作正常,但是在这种情况下,我无法获得正确的语法来添加传递给的块作为属性建立连接ForURL调用类)。
或者,httpConnectionFinishedWithError 可以只调用另一个函数,但在那种情况下,我必须将 self 作为参数传递,在这种情况下,我将如何在块中获取 self ?
还有其他更优雅的解决方案吗?
非常感谢
编辑:更新以显示编译错误的示例
void (^httpConnectionFinishedWithError)(NSError*) =
^(NSError* error)
{
self.boolProperty = NO; // here
}