2017-02-16 14 views
0

У меня есть представление коллекции, которое хранится в репозитории github с именем «MEVHorizontalContacts». Теперь я пытаюсь заполнить данные из разбора в каждую отдельную контактную ячейку. Проблема в том, что никакие данные не заполняются в каждую контактную ячейку. И когда я установил количество ячеек в ячейке больше 0, приложение выйдет из строя. Вот код. Мне нужна помощь в загрузке данных в каждый элемент просмотра коллекции.не может загружать данные в пользовательский вид коллекции

import UIKit 
import Parse 

class MevHorizontalContactsExample2: MEVHorizontalContactsExample1, MEVHorizontalContactsDataSource, MEVHorizontalContactsDelegate { 

var FullNameArray = [String]() 
var ProfileImageArray = [PFFile]() 

var horizontalContacts: MEVHorizontalContacts! 

override init(frame: CGRect) { 
    super.init(frame: frame) 

    self.setupView() 

} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

func setupView() { 
    self.translatesAutoresizingMaskIntoConstraints = false 
    self.horizontalContacts = MEVHorizontalContacts() 
    self.horizontalContacts.backgroundColor = UIColor.white 
    self.horizontalContacts.dataSource = self 
    self.horizontalContacts.delegate = self 
    self.addSubview(self.horizontalContacts) 
    self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[horizontalContacts]|", options: .alignAllCenterX, metrics: nil, views: ["horizontalContacts": self.horizontalContacts])) 
    self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[horizontalContacts]|", options: .alignAllCenterY, metrics: nil, views: ["horizontalContacts": self.horizontalContacts])) 
    loadMore() 
} 
// MARK: - MEVHorizontalContactsDataSource Methods 

func numberOfContacts() -> Int { 
    return FullNameArray.count 
} 

func numberOfItems(atContactIndex index: Int) -> Int { 
    switch index { 
    case 0: 
     return 2 
    case 1: 
     return 3 
    case 2: 
     return 2 
    case 3: 
     return 4 
    default: 
     return 3 
    } 

} 

// pagination 
func loadMore() { 

       // STEP 2. Find posts made by people appended to followArray 
       let query = PFQuery(className: " CommercialUsers") 
       query.addDescendingOrder("createdAt") 
       query.findObjectsInBackground(block: { (objects, error) -> Void in 
        if error == nil { 

         // clean up 
         self.FullNameArray.removeAll(keepingCapacity: false) 
         self.ProfileImageArray.removeAll(keepingCapacity: false) 

         // find related objects 
         for object in objects! { 
          self.FullNameArray.append(object.object(forKey: "FullName") as! String) 

         } 

        } else { 
         print(error!.localizedDescription) 
        } 
       }) 

} 

func contact(at index: Int) -> MEVHorizontalContactsCell { 
    var cell: MEVHorizontalContactsCell? = self.horizontalContacts.dequeueReusableContactCell(for: index) 
    cell?.imageView?.image = UIImage(named: self.getImageName(at: index)) 
    cell?.imageView?.layer.borderColor = UIColor.clear.cgColor 
    cell?.imageView?.layer.borderWidth = 1.0 
    cell?.label?.text = self.getUserName(at: index) 
    cell?.label?.font = UIFont.boldSystemFont(ofSize: CGFloat(12.0)) 
    return cell! 
} 

func item(_ item: Int, atContactIndex index: Int) -> MEVHorizontalContactsCell { 
    var image: UIImage? 
    var labelText: String 
    switch item { 
    case 0: 
     labelText = "Call" 
     image = UIImage(named: "actionCall") 
    case 1: 
     labelText = "Email" 
     image = UIImage(named: "actionEmail") 
    case 2: 
     labelText = "Message" 
     image = UIImage(named: "actionMessage") 
    default: 
     labelText = "Call" 
     image = UIImage(named: "actionCall") 
    } 

    var cell: MEVHorizontalContactsCell? = self.horizontalContacts.dequeueReusableItemCell(for: index) 
    cell?.imageView?.image = image 
    cell?.imageView?.tintColor = UIColor(red: CGFloat(34/255.0), green: CGFloat(167/255.0), blue: CGFloat(240/255.0), alpha: CGFloat(1)) 
    cell?.imageView?.layer.borderColor = UIColor(red: CGFloat(34/255.0), green: CGFloat(167/255.0), blue: CGFloat(240/255.0), alpha: CGFloat(1)).cgColor 
    cell?.imageView?.layer.borderWidth = 1.0 
    cell?.label?.text = labelText 
    cell?.label?.font = UIFont.boldSystemFont(ofSize: CGFloat(10.0)) 
    return cell! 
} 

func horizontalContactsInsets() -> UIEdgeInsets { 
    return UIEdgeInsetsMake(10, 0, 10, 0) 
} 

func horizontalContactsSpacing() -> Int { 
    return 10 
} 

func contactSelected(at index: Int) { 
    print("selectedAtContactIndex - index : %zu option : %zu ") 
} 

func item(_ item: Int, selectedAtContactIndex index: Int) { 
    print("selectedAtContactIndex - index : \(index) option : \(item) ") 
} 
// MARK: - Generate Data Methods 

func getUserName(at index: Int) -> String { 
    var array: [Any] = ([FullNameArray] as NSArray) as! [Any] 
    return array[index] as! String 
} 

func getImageName(at index: Int) -> String { 
    var array: [Any] = ["image1", "image2", "image3", "image4", "image5", "image6", "image7", "image8", "image9", "image10", "image1", "image2", "image3", "image4", "image5", "image6", "image7", "image8", "image9", "image10", "image1", "image2", "image3", "image4", "image5", "image6", "image7", "image8", "image9", "image10"] 
    return array[index] as! String 
} 

}

+0

Где все методы делегата 'collectionView' и источники данных? Вы возвращаете ячейку вне «cellForItemAt» и т. Д. Является ли этот псевдокод или реальным? – garrettmurray

+0

это пользовательский вид коллекции. Его здесь называют – john

+0

func getUserName (по индексу: Int) -> String { var array: [Any] = FullNameArray return array [index] as! String } – john

ответ

0

Проблема заключается в следующем:

-Вы создать пустой массив

var FullNameArray = [String]() 

-Тогда CollectionView запрашивает информацию, но массив пуст и не показывает ничего.

-Вы запрашиваете информацию для анализа с помощью функции loadMore, но вы никогда не перезагружаете collectionView!

-После того как вызов Parse является асинхронным, вам необходимо перезагрузить collectionView после того, как у вас есть ответ.

Решение:

// pagination 
func loadMore() { 

       // STEP 2. Find posts made by people appended to followArray 
       let query = PFQuery(className: " CommercialUsers") 
       query.addDescendingOrder("createdAt") 
       query.findObjectsInBackground(block: { (objects, error) -> Void in 
        if error == nil { 

         // clean up 
         self.FullNameArray.removeAll(keepingCapacity: false) 
         self.ProfileImageArray.removeAll(keepingCapacity: false) 

         // find related objects 
         for object in objects! { 
          self.FullNameArray.append(object.object(forKey: "FullName") as! String) 

         } 

        //ADD THIS 
        self.horizontalContacts.reloadData() 

        } else { 
         print(error!.localizedDescription) 
        } 
       }) 

} 

Надеется, что это работает.

+0

это не сработало. collection view is blank – john

+0

Вы хотите увидеть картинку – john

+0

Как вы думаете – john

0

Для таблицы, чтобы загрузить данные, которые нужно возвращать правильное количество ячеек (который будет больше, чем 0). Если вы загружаете данные после загрузки страницы, сначала не загружаются данные (из-за чего они выходят из строя). Решение прост. Массив должен содержать все данные. Он должен быть изменен и инициализирован пустым. Верните количество массивов для количества ячеек. Загрузите данные и добавьте массив. Затем перезагрузите таблицу. Массив должен иметь новый правильный счетчик, и данные должны загружаться.

+0

, но этого не происходит. Я получаю нулевую информацию в массиве – john

+0

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

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

  • Нет связанных вопросов^_^