2015-09-04 2 views
0

У меня есть класс UserFeed где я храню все сообщения. И у меня есть класс UserProfile, где хранятся все данные пользователя (имя, возраст, профессия). В настоящее время у меня есть указатель на UserProfile. Но когда я пытаюсь установить профессияLabel, он дает мне nil.PFObject подклассы и указатели

// PostsCollectionViewCell.swift 


import UIKit 
import DateTools 
import Parse 

class PostsCollectionViewCell: UICollectionViewCell { 

    var post: Post! { 
     didSet { 
      updateUI() 
     } 
    } 

    @IBOutlet var postLabel: UILabel! 
    @IBOutlet var genderLabel: UILabel! 
    @IBOutlet var occupationLabel: UILabel! 
    @IBOutlet var timeLabel: UILabel! 
    @IBOutlet var likeButton: UIButton! 

    func layoutSubview() { 
     super.layoutSubviews() 
    } 

    private func updateUI() { 

     occupationLabel?.text! = post.userProfile.occupation 
     timeLabel?.text! = post.createdAt?.shortTimeAgoSinceDate(NSDate()) ?? "" 
     postLabel?.text! = post.postText 
    } 


    @IBAction func likeButtonDidTouch(sender: AnyObject) { 

    } 

} 

Сообщение запроса на мой DiscoverViewController

func queryForPosts() { 

    PFGeoPoint.geoPointForCurrentLocationInBackground { (geopoint, error) in 

     if !(error != nil) { 

      if let geoPoint = geopoint { 

       let query = PFQuery(className: "UserFeed") 
       query.whereKey("location", nearGeoPoint: geoPoint, withinMiles: 5) 
       query.addDescendingOrder("createdAt") 
       query.includeKey("userProfile") 

       query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in 
        if error == nil { 
         if let postObjects = objects as? [PFObject] { 
          self.posts.removeAll() 
          for postObject in postObjects { 
           let post = postObject as! Post 
           self.posts.append(post) 
          } 

          self.collectionView.reloadData() 
         } 
        } else { 
         print("\(error!.localizedDescription)") 
        } 
       }) 
      } 
     } 
    } 
} 

сообщение подклассов

import UIKit 
import Parse 

public class Post: PFObject, PFSubclassing{ 

    // MARK: - Public API 
    @NSManaged public var username: PFUser 
    @NSManaged public var location: PFGeoPoint? 
    @NSManaged public var userProfile: String! 
    @NSManaged public var postText: String! 
    @NSManaged public var numberOfLikes: Int 
    @NSManaged public var likedUserIdCollection: [String]! 


    public func incrementNumberOfLikes() { 

     numberOfLikes++ 
     self.saveInBackground() 

    } 

    //Mark: - Convience init 

    init(username: PFUser, location: PFGeoPoint?, userProfile: String, postText: String, numberOfLikes: Int) { 

     super.init() 

     self.username = username 
     self.location = location 
     self.userProfile = userProfile 
     self.postText = postText 
     self.numberOfLikes = numberOfLikes 
     self.likedUserIdCollection = [String]() 

    } 

    override init() { 
     super.init() 
    } 

    //MARK: - Like/Dislike 
    public func like(){ 

     let currentUserObjectId = PFUser.currentUser()!.objectId! 
     if !likedUserIdCollection.contains(currentUserObjectId) { 
      numberOfLikes++ 
      likedUserIdCollection.insert(currentUserObjectId, atIndex: 0) 
      self.saveInBackground() 
     } 

    } 

    public func dislike() { 

     let currentUserObjectId = PFUser.currentUser()!.objectId! 
     if likedUserIdCollection.contains(currentUserObjectId) { 
     numberOfLikes-- 
      for (index, userId) in likedUserIdCollection.enumerate() { 
       if userId == currentUserObjectId { 
        likedUserIdCollection.removeAtIndex(index) 
        break 
       } 
      } 

      self.saveInBackground() 

     } 

    } 

    // MARK: - PFSubClassing 
    override public class func initialize() { 

     struct Static { 
      static var onceToken : dispatch_once_t = 0; 
     } 
     dispatch_once(&Static.onceToken) { 
      self.registerSubclass() 
     } 
    } 

    public static func parseClassName() -> String { 

     return "UserFeed" 

    } 
} 

ответ

2

нужно инициализировать объект Post, кажется, что вы не сделали этого.

+0

Я не думаю, что понимаю. Я добавил больше подсказок. Я совершенно новичок во всем этом, и я изо всех сил пытался понять это уже пару дней. – makingbreaking

5

Объект не может хранить значение, пока инициализировать, не нужно вызывать ниже инициализации в настоящее время в вашем коде

Init (имя пользователя: PFUser, местоположение: PFGeoPoint ?, Userprofile: String, postText: String, numberOfLikes: Int) {

super.init() 

    self.username = username 
    self.location = location 
    self.userProfile = userProfile 
    self.postText = postText 
    self.numberOfLikes = numberOfLikes 
    self.likedUserIdCollection = [String]() 

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