簡體   English   中英

沒有辦法將數據從塊保存到ios obj-c中的屬性或外部對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM