Je crée une application pour envoyer des messages OSC via WLAN.
C'est pourquoi j'ai une entité "Réseau" avec un seul objet dedans. Cause de cela, je veux un Singleton pour aller chercher cet objet.
Dans AppDelegate i créé un classmethod pour obtenir le ManagedObjectContextSingleton pour récupérer CoreData, se bloque sur [fetchedResultsController_ performFetch: & error]
static NSManagedObjectContext* manObCon;
@implementation...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
manObCon = self.managedObjectContext;
...
}
+ (NSManagedObjectContext*) getManObCon{
return manObCon;
}
le managedObjectContext arrive avec une adresse dans mon singleton, donc je pense que cela devrait fonctionner.
Singleton.h (rien de spécial ici)
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import "OSC_iPadAppDelegate.h";
#import "Network.h";
@interface NetworkSingleton : NSObject <NSFetchedResultsControllerDelegate> {
}
+ (Network*) getNetwork;
+ (void) insertNewObject;
+ (NSFetchedResultsController *)fetchedResultsController;
@end
Singleton.m APP AT [fetchedResultsController_ performFetch:&error]
avec ACCIDENTS
warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/usr/lib/info/dns.so (file not found).
Program received signal: “EXC_BAD_ACCESS”.
warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found).
kill
quit
Heres Code de Singleton.m
#import "NetworkSingleton.h"
static Network* _network;
static NSFetchedResultsController *fetchedResultsController_;
static NSManagedObjectContext *managedObjectContext_;
@implementation NetworkSingleton
+ (Network*) getNetwork{
managedObjectContext_ = [OSC_iPadAppDelegate getManObCon]; //get the managedObjectContex from AppDelegate
//fetchedResultsController init
fetchedResultsController_ = [NetworkSingleton fetchedResultsController]; //get fetchedResultsController
//check if _network is set
if (_network == nil) {
id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController_ sections] objectAtIndex:0];
//if not set, check if there is already an network object in coredata
if ([sectionInfo numberOfObjects] == 0) {
//Create new Networkobject, if no one is existing
[NetworkSingleton insertNewObject];
fetchedResultsController_ = nil;
}
//set _network
_network = [fetchedResultsController_ objectAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
}
return _network;
}
+ (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController_ != nil) {
return fetchedResultsController_;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Network" inManagedObjectContext: managedObjectContext_];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:1];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sourcePort" ascending:YES selector:nil];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext_ sectionNameKeyPath:nil cacheName:nil];
aFetchedResultsController.delegate = self;
fetchedResultsController_ = aFetchedResultsController;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
NSError *error = nil;
/*
APP CRASHES HER
*/
if (![fetchedResultsController_ performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return fetchedResultsController_;
}
@end
donc je ne sais pourquoi le fetchedResultsController_ ne fait pas ce qu'il fait le mieux - aller chercher
ce n'est pas nul mais je ne peux pas comprendre l'Errormessage et rien trouvé ob Google ou ailleurs.
Le problème pourrait être, que j'ai besoin d'initier le fetchedResultsController par moi-même, car il ne init pas automatiquement comme dans les contrôleurs de vue générés.
Merci pour votre aide
Ceci est une mauvaise conception. Un fetchedResultsController est destiné à être le contrôleur entre une couche de modèle de données de base et une couche de vue UITableView. Cela va à l'encontre du but de la FRC de le faire tenir par un objet modèle singleton. Vous avez brisé votre modèle et contrôlé les calques ensemble et avez codé en dur votre tableview aux données. – TechZen
Je ne l'utilise pas comme TableView dans ce cas. J'ai besoin du singleton parce que j'utilise les données dans plusieurs classes qui ne sont pas des vues. Mais comment puis-je enregistrer une seule instance sans CoreData? – Seega