私はWLAN経由でOSCメッセージを送信するためのアプリをビルドします。
私はなぜそれが単一のオブジェクトで "ネットワーク"エンティティを持っている。このため、シングルトンがこのオブジェクトを取得したい。 AppDelegateで
私はManagedObjectContextシングルトンがCoreDataをフェッチすると[fetchedResultsController_ performFetch:&error]がクラッシュする
static NSManagedObjectContext* manObCon;
@implementation...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
manObCon = self.managedObjectContext;
...
}
+ (NSManagedObjectContext*) getManObCon{
return manObCon;
}
を取得するクラスメソッドを作成しmanagedObjectContextは私のシングルトンのアドレスに到着したので、私はそれが動作するはずだと思います。
Singleton.h(ここでは何も特別な)
#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は
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
で[fetchedResultsController_ performFetch:&error]
ATクラッシュ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
ので、私は知りませんなぜfetchedResultsController_が彼がベストを尽くしていないのか - 取ってくる
それはゼロではありませんが、私はできませんErrormessageを理解し、Googleや他のどこかに何も見つからない。
問題は、私自身がfetchedResultsControllerを初期化する必要があります。なぜなら、生成されたビューコントローラのように自動的にinitを実行しないからです。あなたの助けを
おかげ
これは貧弱な設計です。 fetchedResultsControllerは、コアデータモデルレイヤーとUITableViewビューレイヤーの間のコントローラーを意図しています。それは、シングルトンモデルオブジェクトによって保持されることをFRCの目的に反する。あなたはモデルを壊してレイヤーを一緒にコントロールし、テーブルビューをデータにハードコードしました。 – TechZen
私はこの場合、TableViewとして使用しません。ビューではない多くのクラスのデータを使用するため、シングルトンが必要です。 しかし、CoreDataを使用せずに1つのインスタンスを保存するにはどうすればよいですか? – Seega