2015-02-03 8 views
0

Im работает над приложением, и я бы хотел, чтобы он заполнял ячейки на основе пользователей, находящихся на заданном расстоянии от текущего пользователя. По какой-то причине пользовательские ячейки не заполняются правильными объектами. Метки и изображения, которые должны быть извлечены, пусты. Все, что я получаю, это пустая ячейка. Я убедился, что я дал идентификатору ячейки правильное имя, и я также убедился, чтобы связать tableviewcontroller и tablecellview с их соответствующими классами, но все равно не повезло.Контроллер PFQueryTableView не загружает пользовательские ячейки

первым я создал Инициализаторы:

class TableViewController: PFQueryTableViewController, CLLocationManagerDelegate { 



let locationManager = CLLocationManager() 
var currLocation: CLLocationCoordinate2D? 

override init!(style: UITableViewStyle, className: String!) { 
    super.init(style: style, className: className) 

} 

required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 

    self.parseClassName = "User" 
    self.textKey = "FBName" 
    // self.imageKey = "pictureURL" 
    self.pullToRefreshEnabled = true 
    self.objectsPerPage = 10 
    self.paginationEnabled = true 

} 

Тогда в viewDidLoad я включены услуги местоположения:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.tableView.estimatedRowHeight = 200 
    self.locationManager.requestWhenInUseAuthorization() 

    if CLLocationManager.locationServicesEnabled() { 
     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     locationManager.requestAlwaysAuthorization() 
     locationManager.startUpdatingLocation() 
     loadData() 
     println("location services enabled bruh") 
    } 
} 

Далее я отменяю функцию queryfortable:

override func queryForTable() -> PFQuery! { 
    let query = PFQuery(className: "User") 
    if let queryLoc = currLocation { 
     query.whereKey("location", nearGeoPoint: PFGeoPoint(latitude: queryLoc.latitude, longitude: queryLoc.longitude), withinMiles: 50) 
     query.limit = 40 
     query.orderByAscending("createdAt") 
     println("\(queryLoc.latitude)") 
     return query 

    } else { 
     query.whereKey("location", nearGeoPoint: PFGeoPoint(latitude: 37.411822, longitude: -121.941125), withinMiles: 50) 
     query.limit = 40 
     query.orderByAscending("createdAt") 
     println("else statement") 
     return query 

    } 
} 

тогда функция objectAtIndexPath

override func objectAtIndexPath(indexPath: NSIndexPath!) -> PFObject! { 
    var obj : PFObject? = nil 
    if indexPath.row < self.objects.count { 
     obj = self.objects[indexPath.row] as? PFObject 
    } 
    return obj 

} 

и, наконец, я вернулся в камеру, но по какой-то причине он не работает:

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!, object: PFObject?) -> PFTableViewCell! { 
    let cell = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath) as TableViewCell 
    cell.userName?.text = object?.valueForKey("FBName") as? String 
    let userProfilePhotoURLString = object?.valueForKey("pictureURL") as? String 
    var pictureURL: NSURL = NSURL(string: userProfilePhotoURLString!)! 
    var urlRequest: NSURLRequest = NSURLRequest(URL: pictureURL) 
    NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue.mainQueue()) { (NSURLResponse response, NSData data,NSError error) -> Void in 
     if error == nil && data != nil { 
      cell.userImage?.image = UIImage(data: data) 
     } 
    } 
    cell.ratingsView?.show(rating: 4.0, text: nil) 

    return cell 
} 

пс, у меня есть число секций, установленных на 1, как раз не думаю, что метод будет полезен, чтобы показать Вот.

+0

я попытался проверить, если он cell.userName был равен нулю, используя Println() внутри cellforrowatindexpath, но это, кажется, что метод не вызываемый по какой-то причине .... – user3413380

+0

объект - словарь. Когда я пытаюсь получить значение с помощью ключа в println, функция println не вызывается, и поскольку она расположена с помощью pathforrowatindex, мы можем предположить, что функция не вызывается либо – user3413380

+0

, можете ли вы показать свою функцию «tableview numberOfRowsInSection»? вы вызываете 'objectAtIndexPath' внутри' cellForRowAtIndexPath' для получения данных из каждой строки? Удалось ли вам вызвать tableView.reloadData() после загрузки ваших данных? – rakeshbs

ответ

0

В порядке я нашел проблему! Проблема заключалась в том, что я пытался использовать PFQuery, чтобы получить список PFUser s. Я узнал, что это невозможно сделать, используя PFQuery. Infact PFUser имеет собственный метод запроса для извлечения информации от своих пользователей.

все я должен был сделать заменить эту строку: let query = PFQuery(className: "User") с этим: let query = PFUser.query()

Смежные вопросы