2016-04-18 11 views
0

私はこのforループを持っています。これはURLのレコードを繰り返し処理してリクエストします。リクエストの結果は、他の保留中のものをアップロードするために再び使用されています。しかし、私はこの行でエラーが発生します:print("id is \(t.url!)")。私はループがすでにコードの行が実行されているので、それがnilを返す理由だと思う。 これについてお勧めしますか?ループ内の値を保持する

let fetchRequest = NSFetchRequest(entityName:"Pending") 

         let company_temp = try context.executeFetchRequest(fetchRequest) 
         let company = company_temp as! [Pending] 
         for t in company { 
          let request = NSURLRequest(URL: NSURL(string:t.url!)!) 

          NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in 
           print("ticket is \(NSString(data: data!, encoding: NSUTF8StringEncoding))") 
           print("id is \(t.url!)") 
           print("id is \(t.id!)") 
           self.upload_sig(NSString(data: data!, encoding: NSUTF8StringEncoding)!, id: t.id!) 



         } 
+0

どうすればtidですか?それは正常に実行されていますか? –

+0

予期せずnil例外が発生しますか?管理対象オブジェクトは依然としてリポジトリに存在しますか?その文脈はまだ存在しますか? – Wain

+0

いいえ、私はt.url部分を削除します。 nilエラーはt.id –

答えて

1

それが動作しない理由を言うのは難しいのですが、私は、管理対象オブジェクトがこれ以上存在しないか、またはそれが中のコンテキストが破棄されたこと、それは移入ができないことを推測したいですそれはデータなので、エラーが発生します。

具体的な状況では、URLリクエストの場合、完成を扱うコードでオブジェクトを実際に必要としないので、そこに保持しないでください。代わりに、コンテナではなく必要なIDだけを取得してください。

let request = NSURLRequest(URL: NSURL(string:t.url!)!) 
let objectId = i.id! 

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in 
    print("ticket is \(NSString(data: data!, encoding: NSUTF8StringEncoding))") 
    print("id is \(objectId)") 
    self.upload_sig(NSString(data: data!, encoding: NSUTF8StringEncoding)!, id: objectId) 

また、控えめにし、あなたが近づく中で、追加の一時的な値にアクセスしたい場合は、このような何かを行うことができます... error秒間

0

を確認してください。

func makeFechRequest(url: String, id: String) -> ((NSURLResponse, NSData, NSError) ->()) { 
    let url = url 
    let id = id 

    func request(response: NSURLResponse, data: NSData?, error: NSError) { 
     print("ticket is \(NSString(data: data!, encoding: NSUTF8StringEncoding))") 
     print("id is \(url)") 
     print("id is \(id)") 
     self.upload_sig(NSString(data: data!, encoding: NSUTF8StringEncoding)!, id: id) 
    } 
    return request 
} 

そして、このようにそれを呼び出す:

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), 
              makeFetchRequest(url: t.url!, id: t.id!)) 

私はすべてのタイプが正しいと確信していませんが、それはあなたのほとんどの方法を得る必要があります

ドキュメントhere

関連する問題