2014-09-13 2 views
0

avec la version dernière Xcode (GM) Je vais avoir beaucoup d'erreurs construire mon projet avec la version précédente ne tachetée comme le code suivantXcode 6 GM - NSFetchedResultsSectionInfo

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

    let sectionInfo = self.fetchedResultsController.sections[section] as NSFetchedResultsSectionInfo 
    println("numberOfRowsInSection: \(self.entityName()) : \(sectionInfo.numberOfObjects)") 
    return sectionInfo.numberOfObjects 
} 

Je réécris ce qui suit :

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    //#warning Incomplete method implementation -- Return the number of items in the section 
    if let sectionInfo = fetchedResultsController.sections { 
     println("numberOfRowsInSection: \(self.entityName()) : \(sectionInfo[section].numberOfObjects)") 
     return sectionInfo[section].numberOfObjects 

    } 
return 0 
} 

Y a-t-il une meilleure façon d'écrire cela?

+0

NSFetchedResultsSectionInfo est un protocole, pas une classe. – quellish

Répondre

0

Franchement, je ne programme pas rapide, mais je pense que cet extrait de code Obj-C devrait vous aider à Refactor votre code:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    NSInteger rows = 0; 

    if ([[self.fetchedResultsController sections] count] > 0) { 
     id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; 
     rows = [sectionInfo numberOfObjects]; 
    } 
    return rows; 
} 
+0

Ceci est similaire à ce que je viens d'utiliser avec objectif-c, et cela a fonctionné comme d'habitude. le problème est avec swift – tylyo

1

Depuis Xcode 6 beta 6 ou 7, sections propriété de NSFetchedResultsController est un optionnel. Par conséquent, Apple utilise maintenant le code suivant dans Xcode 6 GM Master-Detail modèle d'application avec Core Data activé (notez que ce code est pour UITableViews mais il devrait également être appliquée pour UICollectionViews en -collectionView:numberOfItemsInSection:):

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    let sectionInfo = fetchedResultsController.sections![section] as NSFetchedResultsSectionInfo 
    return sectionInfo.numberOfObjects 
} 

Si vous mettre un point d'arrêt dans cette méthode et lancer votre modèle d'application Xcode 6 GM Master-Detail pour la première fois, vous verrez que cette méthode est appelée et que sectionInfo a une valeur, même s'il n'y a pas d'éléments à retourner après la requête d'extraction initiale . Bien que j'aurais préféré la liaison optionnelle pour plus de clarté ici, je suppose que si vous suivez strictement le modèle Apple Core Data, il ne peut être dangereux de réutiliser ce code (sans faire une liaison optionnelle). Quoi qu'il en soit, votre code de liaison optionnel semble correct.

Questions connexes