[英]is there no way to save data from block to a property or outside object in ios obj-c
我設計了一個用於異步http請求處理的類“ AsyncHttpRequest”,該類初始化程序將一個塊作為參數。
從“ AsyncHttpRequest”類的以下委托實現中調用該塊:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSDictionary *dict = [NSJSONSerialization
JSONObjectWithData:_dataResponseData //1
options:kNilOptions
error:&error];
myBlock(dict);
}
我正在從像下面這樣的視圖控制器創建上述類的實例
- (void)viewDidLoad {
[super viewDidLoad];
__block NSDictionary *myDic;
AsyncHttpRequest *r = [[AsyncHttpRequest alloc] initWithUrl:urlStr withBlock:^(NSDictionary *d){
NSLog(@"List = %@",d); //Its working
NSDictionary *locDic = [[NSDictionary alloc] initWithDictionary:d];
// the above is working
myDic = d; //not working
myDic = [[NSDictionary alloc] initWithDictionary:locDic];
// The above code is not working..
}];
}
它給出以下錯誤:錯誤:地址不包含指向目標文件中某個部分的部分
有沒有辦法將數據從塊保存到obj-c中的屬性或外部對象?
謝謝...。我已經嘗試了最近3個小時,但沒有任何解決方案。
謝謝
我認為myDic
有可能在使用前被釋放。
這是我的理由, -[AsyncHttpRequest initWithUrl:withBlock:]
捕獲了塊,但未保留myDic
。 在將來的某個時刻,將調用connectionDidFinishLoading
方法,但是到那時, myDic
變量已被釋放,因此超出了范圍。
說得通?
如果是這種情況,則可能的解決方案可能包括:
myDic
然后再將其傳遞給-[AsyncHttpRequest initWithUrl:withBlock:]
方法。 注意: myDic
應該是實例變量/ AsyncHttpRequest
上創建一個NSDictionary
屬性,並將該屬性設置為myDic
。 我找到了解決方案。
如果從委托方法實現中調用了一個塊,則其給出錯誤。
在我的例子中
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
............
.......
myBlock(...);
}
是NSURLConnectionDataDelegate的實現,我從上述方法內部調用了block函數。
它給出了意外的結果,即,無法從塊內部訪問在塊函數外部聲明的任何變量或對象(屬性或實例變量)。 例如
__block NSDictionary *myDic;
AsyncHttpRequest *r = [[AsyncHttpRequest alloc] initWithUrl:urlStr withBlock:^(NSDictionary *d){
NSLog(@"List = %@",d); //Its working
NSLog(@"List = %@",myDic); //not working
}];
在上面的代碼中,myDic在塊外聲明,並且對其進行訪問給出了運行時錯誤。
有人在不理解我的問題的情況下否決了我的問題,如果有人做對了,我將非常感謝。
謝謝....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.