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
위의 코드는 다음과 같은 출력을 제공한다 : 를 ("이것은 문자열이다.") (NULL) 흡입
. 그래서 __weak, __strong 및 __block의 여러 조합을 시도했으며 그 밖의 다른 결과는 다음과 같습니다. ("이것은 문자열입니다.") ("이것은 다른 문자열입니다.") 그러나! 거대한하지만. 완료 블록은 종료되지 않습니다. 열려있는 연결을 나타내는 위쪽 표시 줄의 활동 표시기가 회전을 계속하고 화면이 응답하지 않게됩니다.
어떻게 블록 내에서 파일 이름 - 개체를 성공적으로 설정할 수 있습니까? 미리 감사드립니다.
완료 블록이 완전히 비어 있으면 어떻게됩니까? ASIFormDataRequest 마무리 문제는이 블록에서 수행중인 작업과 아무런 관련이 없다고 생각합니다. –