2016-02-09 1 views
0

Je veux faire une boucle à travers les objets CoreData sans utiliser tableView ou CollectionView ... Mais en utilisant un ViewControllerLooping Core Data Objects en dehors d'une table/Collection Voir

J'ai essayé quelque chose comme:

for var i = 0; i < numberOfExerciseItems; i++ {   
    let exerciseItemsfromDay = fetchedResultController.objectAtIndexPath(i) as! ExerciseItemModel 
} 

Cela ne fonctionne évidemment pas car il n'est pas de type NSIndexPath comme vous le feriez dans une table ou CollectionView. Existe-t-il des moyens de le faire en dehors d'une vue Table/Collection? Merci pour les idées à l'avance.

Modifier De cette réponse, je veux accéder à une entité d'un élément dans le tableau des éléments dans la boucle:

let request = NSFetchRequest(entityName: "ExerciseItemModel") 
let items = (try? context.executeFetchRequest(request)) as? [ExerciseItemModel] ?? [] 

In this loop 
items.forEach { 
    print(items) //Displays all the objects in the console. 
    print(items[1].attribute //Throws the error Value of type'AnyObject' has no member 'attribute' and I cannot access an attribute from the items array . Not sure why! 

} 

Modifier Mon ExerciseModel Classe

import Foundation 
import CoreData 

    @objc(ExerciseItemModel) 
    class ExerciseItemModel: NSManagedObject { 

    // Insert code here to add functionality to your managed object subclass 

    } 

    extension ExerciseItemModel { 

     @NSManaged var exerciseType: String? 
     @NSManaged var exerciseName: String? 
     @NSManaged var durationOrSets: String? 
     @NSManaged var distanceOrReps: String? 
     @NSManaged var weight: String? 
     @NSManaged var backgroundImage: NSData? 
     @NSManaged var dayID: String? 
     @NSManaged var date: NSDate? 

    } 
+0

est-il une raison particulière pour laquelle vous utilisez un contrôleur tiré par les cheveux de résultats? Exécutez simplement une requête d'extraction ordinaire et faites une boucle dans le tableau retourné. –

+0

@MartinR Je veux les comparer à une valeur et filtrer certains objets. Si cela ne vous dérange pas, pourriez-vous poster un exemple de code de ce que vous voulez dire? – Gugulethu

Répondre

1
let request = NSFetchRequest(entityName: "ExerciseItemModel") 
let items = (try? context.executeFetchRequest(request)) as? [ExerciseItemModel] ?? [] 

items.forEach { 
    // Do your stuff 
} 

Un petit exemple. Pas exactement une réponse donc je vais le supprimer quand une réponse correcte a été posté. Cet exemple ne vous montrera aucun message d'erreur s'il y en a, gardez cela à l'esprit.

Edit:

Vous utilisez forEach() correctement:

items.forEach { 
    print($0)    // Print's the object in items 
    print($0.attribute) // Should print the attribute 
} 

print(items[0].attribute) // Probably same error, but it should be used outside the loop 
+0

Cool. J'espère que je trouverai la bonne réponse et que je la posterai. Merci. ;) – Gugulethu

+0

Maintenant que je pense à ce sujet, il répond à votre question;) – Eendje

+0

C'est certainement le cas. ;). Merci – Gugulethu