2017-02-16 3 views
0

Flickr에서 사진을 가져 와서 collectionView에 표시 할 Udacity 포트폴리오 프로젝트 용 앱을 작성하고 있습니다. 버튼을 누르면 collectionView의 사진이 새로 고침됩니다. 그러나 검색 매개 변수가 매번 호출 할 때마다 페이지 번호가 다르더라도 사진을 새로 만들 수는 없습니다. 내 코드는 다음과 같이Swift : Flickr의 사진을 가져 오는 중 항상 같은 사진을 가져옵니다.

내 새로 고침 버튼을 도청
func getPhotosURLFromFlickr(_ lat: AnyObject, lon: AnyObject, _ completionHandlerForGetPhotosURL: @escaping (_ imageURL: [String]?, _ error: NSError?) -> Void) { 

     taskForGetPagesFromFlickr(lat, lon: lon) { (parameters, error) in 
      if let error = error { 
       completionHandlerForGetPhotosURL(nil, error as NSError) 
      } else { 

       if let parameters = parameters { 
        print(parameters) 
        self.taskForGetPhotos(parameters, { (imageURLArray, error) in 
         if let error = error { 
          completionHandlerForGetPhotosURL(nil, error as NSError) 
         } else { 
          if let imageURLArray = imageURLArray { 
           completionHandlerForGetPhotosURL(imageURLArray, nil) 
          } 
         } 
        }) 
       } 
      } 
     } 
    } 

func taskForGetPagesFromFlickr(_ lat: AnyObject, lon: AnyObject, _ completionHandlerForGetPhotosURL: @escaping (_ parameters: [String: AnyObject]?, _ error: NSError?) -> Void) { 

     let parameters = [ 
      Constants.ParametersKey.Method: Constants.Methods.PhotoSearch as AnyObject, 
      Constants.ParametersKey.FlickrAPIKey : Constants.APIInfo.APIKey as AnyObject, 
      Constants.ParametersKey.Format: Constants.ParametersValues.JSON as AnyObject, 
      Constants.ParametersKey.NoJSONCallback: Constants.ParametersValues.DisableJSONCallback as AnyObject, 
      Constants.ParametersKey.PerPage: Constants.ParametersValues.Fifteen as AnyObject, 
      Constants.ParametersKey.Extras: Constants.ParametersValues.MediumURL as AnyObject] 

     var parametersWithCoord = parameters 
     parametersWithCoord[Constants.ParametersKey.lat] = lat 
     parametersWithCoord[Constants.ParametersKey.lon] = lon 

     let url = flickrURLFromParameters(parametersWithCoord) 
     let request = NSMutableURLRequest(url: url) 

     let task = session.dataTask(with: request as URLRequest) { (data, response, error) in 
      if let error = error { 
       completionHandlerForGetPhotosURL(nil, error as NSError) 
      } else { 
       self.convertDataWithCompletionHandler(data!, completionHandlerForConvertData: { (results, error) in 
        if let error = error { 
         completionHandlerForGetPhotosURL(nil, error as NSError) 
        } else { 
//      print(results) 
         guard let photosDict = results?["photos"] as? [String: AnyObject] else { 
          let userInfo = [NSLocalizedDescriptionKey : "NoPhotosFound"] 
          completionHandlerForGetPhotosURL(nil, NSError(domain: "NoPhotosFound", code: 1, userInfo: userInfo)) 
          return 
         } 

         guard let pages = photosDict[Constants.ParametersKey.Pages] as? Int else { 
          let userInfo = [NSLocalizedDescriptionKey : "NoPagesFound"] 
          completionHandlerForGetPhotosURL(nil, NSError(domain: "NoPagesFound", code: 1, userInfo: userInfo)) 
          return 
         } 

         let randomPageIndex = Int(arc4random_uniform(UInt32(pages))) 
         var searchParameters = parametersWithCoord 
         searchParameters[Constants.ParametersKey.Page] = randomPageIndex as AnyObject? 
         print("Number of pages: \(pages)") 
         print("Random page index: \(randomPageIndex)") 
         completionHandlerForGetPhotosURL(searchParameters, nil) 
        } 
       }) 
      } 
     } 

     task.resume() 
    } 

    func taskForGetPhotos(_ parameters: [String: AnyObject], _ completionHandlerForGetPhotosURL: @escaping (_ imageURL: [String]?, _ error: NSError?) -> Void) { 

     let url = flickrURLFromParameters(parameters) 
     let request = NSMutableURLRequest(url: url) 
     print(url) 
     let task = session.dataTask(with: request as URLRequest) { (data, response, error) in 
      if let error = error { 
       completionHandlerForGetPhotosURL(nil, error as NSError) 
      } else { 
       self.convertDataWithCompletionHandler(data!, completionHandlerForConvertData: { (results, error) in 
        if let error = error { 
         completionHandlerForGetPhotosURL(nil, error as NSError) 
        } else { 
//      print(results) 
         guard let photosDict = results?["photos"] as? [String: AnyObject] else { 
          let userInfo = [NSLocalizedDescriptionKey : "NoPhotosFound"] 
          completionHandlerForGetPhotosURL(nil, NSError(domain: "NoPhotosFound", code: 1, userInfo: userInfo)) 
          return 
         } 

         guard let photosArray = photosDict["photo"] as? [[String: AnyObject]] else { 
          let userInfo = [NSLocalizedDescriptionKey : "NoPhotosArrayFound"] 
          completionHandlerForGetPhotosURL(nil, NSError(domain: "NoPhotosArray", code: 1, userInfo: userInfo)) 
          return 
         } 

         var imageURLArray: [String] = [] 

         if photosArray.count != 0 { 
          for pics in photosArray { 
           guard let imageURLString = pics[Constants.ParametersValues.MediumURL] as? String else { 
            print("NoImageURLString Found") 
            return 
           } 

           imageURLArray.append(imageURLString) 
          } 
         } 
         print("ImageURLArray : \(imageURLArray)") 
         completionHandlerForGetPhotosURL(imageURLArray, nil) 
        } 
       }) 
      } 

     } 

     task.resume() 
    } 

네트워킹 코드의 위의 세트가 실행하고, 내가 두 번 버튼을 탭하면 내 print 문은 같습니다

가져 오는 새로운 COLLECTION ... 항목의 수 페이지의 0 번호 : 5712 임의 문서로 지수 : 490 https://api.flickr.com/services/rest?page=490&method=flickr.photos.search&format=json&lon=103.7940514843148&api_key=apiKey에 & per_page = 15 & 위도 = 1.411935988414726 & 엑스트라 = url_m,557,636 80,403,210 nojsoncallback = 1 ImageURLArray : [ "https://farm3.staticflickr.com/2059/32542810620_37312d07c9.jpg" 「https://farm3.staticflickr.com/2330/32102051403_46e30a5eec.jpg」 "https://farm3.staticflickr.com/2104/32529883860_17558a0acf.jpg" "https://farm3.staticflickr.com/2595/32778162441_db4a98d3cd.jpg" "https://farm3.staticflickr.com/2466/32087213853_257910d32d.jpg" "https://farm3.staticflickr.com/2029/32891916665_2d2d177e71.jpg" 「https://farm4.staticflickr.com/3685/32878992915_38baaf513e.jpg」 "https://farm1.staticflickr.com/631/32062787803_ed58defea5.jpg" " https://farm3.staticflickr.com/2332/32873171215_c807db5364.jpg " "https://farm3.staticflickr.com/2788/32825584606_7d2bff507c.jpg " "https://farm3.staticflickr.com/2479/32052120503_1317f70f1a.jpg " "https://farm3.staticflickr.com/2909/32023922664_d276f52369.jpg " "https://farm1.staticflickr.com/376/32023912434_9b89fc3d7b.jpg " "https://farm1.staticflickr.com/455/32018845514_22681384ae.jpg " "https://farm3.staticflickr.com/2833/32734093131_0e8da333f4.jpg "]

가져 오는 NEW COLLECTION ... 항목의 수 페이지의 0 번호 : 5712 임의 문서로 지수 : 5383 https://api.flickr.com/services/rest?page=5383&method=flickr.photos.search&format=json&lon=103.7940514843148&api_key=apiKey에 & per_page = 15 & 위도 = 1.411935988414726 & 엑스트라 = url_m & nojsoncallback = 1 ImageURLArray : [ "https://farm3.staticflickr.com/2059/32542810620_37312d07c9.jpg" 「https://farm3.staticflickr.com/2330/32102051403_46e30a5eec.jpg」 "https://farm3.staticflickr.com/2104/32529883860_17558a0acf.jpg" "https://farm3.staticflickr.com/2595/32778162441_db4a98d3cd.jpg" "https://farm3.staticflickr.com/2466/32087213853_257910d32d.jpg" "https://farm3.staticflickr.com/2029/32891916665_2d2d177e71.jpg" 「https://farm4.staticflickr.com/3685/32878992915_38baaf513e.jpg」 "https://farm1.staticflickr.com/631/32062787803_ed58defea5.jpg" "https://farm3.staticflickr.com/2332/32873171215_c807db5364.jpg" "https://farm3.staticflickr.com/2788/32825584606_7d2bff507c.jpg" "https://farm3.staticflickr.com/2479/32052120503_1317f70f1a.jpg" "https://farm3.staticflickr.com/2909/32023922664_d276f52369.jpg" "https://farm1.staticflickr.com/376/32023912434_9b89fc3d7b.jpg" "https://farm1.staticflickr.com/455/32018845514_22681384ae.jpg" "https://farm3.staticflickr.com/2833/32734093131_0e8da333f4.jpg"]

당신이 생각하는 것

검색 페이지 두 배에 대해 서로 다른,하지만 imageURLArray이 일 실제로 그럼에도 불구하고 그 같은. 나는 그 이유를 밝혀 내지 못하는 것 같습니다.

감사합니다. 감사합니다. 감사합니다.

답변

0

어떻게 든 내 문제를 해결할 수 있습니다. randomPageIndex를 최대 100 개로 제한하고 성공적으로 페이지를 새로 고칩니다.

아마도 Flickr에는 내가 인식하지 못할 수있는 최대 검색 페이지가있을 수 있습니다.