当UICollectionView调用显示单元格时,数据未从Core Data完全加载

时间:2015-08-19 21:03:06

标签: ios swift cocoa-touch core-data uicollectionview

我想在viewDidLoad中从Core Data读取的UICollectionView中显示一些数据。但是,当UICollectionView呈现其单元格时,数据尚未完全加载。因此,UICollectionView为空。

我想问的是如何在UICollectionView开始加载其单元格之前确保数据准备就绪。以下是我正在处理的代码的一部分。

class MenuViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {

    @IBOutlet weak var categoryCollectionView: UICollectionView!

    var allDishes = [AnyObject]()
    var categoryList = [String]()

    let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        let request = NSFetchRequest(entityName: self.dishItemEntityName)
        var allDishes = self.context?.executeFetchRequest(request, error: nil)

        if let allDishes = allDishes {
            for dish in self.allDishes {
                let dish = dish as! DishItem
                if contains(self.categoryList, dish.category) {
                    continue
                } else {
                    self.categoryList.append(dish.category)
                }
            }
        }
    }


    // MARK: Delegate Methods

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return self.categoryList.count
    }
}

2 个答案:

答案 0 :(得分:1)

viewDidLoad之前调用

viewWillAppear。您可以在reloadData中的集合视图上调用viewWillAppear

更好:使用NSFetchedResultsController,这将为内存管理,性能和自动更新带来许多其他好处。

答案 1 :(得分:0)

在viewDidLoad

的末尾调用 reloadData
 $parameters = array(
    'app_id' => $facebook->getAppId(),
    'to' => $facebookUserId,
    'link' => 'http://google.nl/',
    'redirect_uri' => 'http://my.app.url/callback'
 );
 $url = 'http://www.facebook.com/dialog/send?'.http_build_query($parameters);
 echo '<script type="text/javascript">window.open('.json_encode($url).', ...