2014-01-10 23 views
0

我從NSURL獲取數據,但如果我可以更改視圖,然後停止接收的NSData如何停止從NSURL的ios數據?

我停止URL receiveing數據,下面我的代碼

-(void)AllPoint{ 

      NSString *passString=[NSString stringWithFormat:URL]; 
      //NSLog(@"all %@",passString); 
      NSURL *url_album=[NSURL URLWithString:passString]; 

      dispatch_async(kBgQueue, ^{ 
       NSData* data = [NSData dataWithContentsOfURL:url_album]; 
       [self performSelectorOnMainThread:@selector(allPOINT:) withObject:data waitUntilDone:YES]; 
      }); 

     } 
     -(void)allPOINT:(NSData *)responseData{ 

       if (responseData==nil){ 

       } else { 

        NSError* error; 
        NSMutableDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 

        //NSLog(@"all:%@",json); 
       } 
      } 

怎麼可能呢?

+0

你的意思是,如果你取消了,你不想'allPOINT'被調用?如果該實例被取消,則不應保留該實例? – Wain

+0

這個方法先調用然後回去然後停止調用或接收responseData中的 - (void)allPOINT :(NSData *)responseData方法。這可能嗎? –

+0

這是什麼意思'kBgQueue'。它的主要隊列? –

回答

2

塊不能被取消..電話dataWithContentsOfURL也不能取消。無論如何,它將完成。

你有一個使用該委託=>則可以取消連接

  • 只是不執行回調allPOINT異步變種兩個選項

    1. 使用NSURLConnection的:如果你的視圖是不可見了

    ...我;)

     __weak typeof(self) wself = self; 
         dispatch_async(kBgQueue, ^{ 
          typeof(wself) sself = wself; 
          NSData* data = [NSData dataWithContentsOfURL:sself->url_album]; 
          if(sself.visible) 
           [sself performSelectorOnMainThread:@selector(allPOINT:) withObject:data waitUntilDone:YES]; 
         }); 
    
    ; D與方法2爲1的方式是很多額外的工作去

    一)注意到我用微弱的裁判自己,以不保留自...

    B)你需要,你控制的屬性visible你在viewDidAppear中將其設置爲true,並在viewWillDisappear中將其設置爲false

  • +0

    第三種選擇是使用AFNetworking或其他包裝器進行url連接 –

    +1

    +1。我強烈建議始終使用異步URL加載。 – Abizern

    +0

    如果我在同一視圖控制器中調用其他nsurl,那麼這個NSURL停止? –