CoreData im eigenem Framework nutzen

  • CoreData im eigenem Framework nutzen

    Hallo alle zusammen,

    ich habe mal eine Frage zu CoreData. Ich habe mir ein Framework zusammen gebaut mit der Hilfe von github.com/kstenerud/iOS-Universal-Framework

    Nun nutze ich in meinem Framework CoreData, also habe ich wie sonst auch mir ein Model gebaut, nen Coordinator usw.

    PHP-Quellcode

    1. NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"];
    2. NSManagedObjectModel *model = [[NSManagedObjectModel alloc]initWithContentsOfURL:modelURL];
    3. NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];
    4. NSError *error = nil;
    5. // get application and bundle URL
    6. NSURL *appDocURL = [[[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask] lastObject];
    7. // setting security attributes for files
    8. NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:NSFileProtectionComplete, NSFileProtectionKey, nil];
    9. error = nil;
    10. [[NSFileManager defaultManager]setAttributes:attributes ofItemAtPath:[appDocURL path] error:&error];
    11. if (error) {
    12. DDLogError(@"Error while setting file attributes: %@", [error localizedDescription]);
    13. }
    14. NSString *dataBaseName = [NSString stringWithFormat:@"%@.sqlite",@"Model"];
    15. NSURL *databaseStoreURL = [appDocURL URLByAppendingPathComponent:dataBaseName isDirectory:NO];
    16. [databaseStoreURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];
    17. if (error) {
    18. DDLogError(@"Error: %@, %@", error, [error userInfo]);
    19. } else {
    20. DDLogInfo(@"Database was created.");
    21. }
    22. error = nil;
    23. NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
    24. [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
    25. [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    26. [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:databaseStoreURL options:options error:&error];
    27. self.managedObjectContext.persistentStoreCoordinator = coordinator;
    28. self.inSQLLiteDataManager = [[ITGDefaultDataManager alloc]initWithManagedObjectContext:self.managedObjectContext];
    29. if (error) {
    30. DDLogError(@"Error: %@, %@", error, [error userInfo]);
    31. }
    Alles anzeigen


    In meinem Framework geht soweit alles, zumindest wenn ich es mit UnitTest teste. Nun habe ich das Framework kompiliert und in einem Projekt eingebunden, dieses crash nun und Gibt folgende Fehlermeldung:
    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Cannot create an NSPersistentStoreCoordinator with a nil model'

    Ich verstehe schon was er für ein Problem hat, das er die Model Datei im Endeffekt nicht findet, ich wüsste nur nicht wie ich es beheben kann.

    Hat von euch jemand eine Idee??

    Schon mal Danke.

    Viele Grüße
    Cabaalo
  • Anhand Deines Codes lässt sich dazu wenig sagen. Kennst Du dieses Tutorial, um Ressourcen in statische Libs einzubinden?

    Aus eigener Erfahrung würde ich allerdings eher ein Library-Projekt erstellen und das als Subprojekt einbinden. Frameworks machen allenfalls Sinn, wenn Du das Projekt ohne Sourcen weitergeben möchtest.
    „Meine Komplikation hatte eine Komplikation.“
  • Ich habe den Fehler entdeckt verstehe es aber noch nicht. In der Zeile:

    PHP-Quellcode

    1. NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"];


    rufe ich das Model mit der DateiEndung momd auf, das hat er aber nicht gefunden. Nun habe ich mir mal die kompilierte Datei angeschaut und da heißt sie mit der Dateiendung mom. Jetzt weiß ich nicht wieso, wann wird den was verwendet?