我碰到使用^在Objective-C塊的一些問題。我試圖從一個塊內設置一個實例變量 - 我已經閱讀了關於該主題的一些Apple文檔,並且我覺得我已經嘗試了一切。從^塊訪問屬性導致愚蠢的行爲
@interface MyClass
{
// I have tried all possible combinations using __weak, __strong and __block.
__weak __block NSMutableArray *filenames;
}
// *.m
static ASIFormDataRequest *g_request = nil;
@implementation MyClass
-(void) funnymethod
{
filenames = [NSMutableArray array];
[filenames addObject:@"This is a string."];
NSLog(@"%@", filenames);
g_request = [InitializerClass initializeRequest];
[g_request setCompletionBlock:^
{
filenames = [NSMutableArray array];
[filenames addObject:@"This is another string."];
NSLog(@"%@", filenames);
}];
[g_object startASynchronous];
}
@end
上面的代碼給出以下輸出: ( 「這是一個字符串。」) (空)
即吸收。所以,我已經試過__weak的不同組合,__strong和__block - 和其他任何給出了下面的輸出: (「這是一個字符串。」) (「這是另一個字符串。」) BUT!有一個巨大的但是。完成塊從不退出。頂部欄中指示打開連接的活動指示器不斷旋轉,屏幕變得無法響應。
如何設置文件名對象從成功的塊中?提前致謝。
如果您的完成塊完全空白,會發生什麼情況?我認爲ASIFormDataRequest沒有完成的問題與你在這個塊中做什麼無關。 – 2012-04-09 16:02:44