私は私が修正している作業プロジェクトを持っています、
coredataを使おうとするとクラッシュします。
プロジェクトには以前はcoredataがなかったため、追加されました。
以前のベースSDK[number??]の場合applicationDocumentsDirectory
と同様に、URLではなくNSStringを返します。
動作するように変更しましたか?しかし、coredataを使おうとするとクラッシュします。
#import "QRGenAppDelegate.h"
//#import "QRGenViewController.h"
#import "MainViewController.h"
@implementation QRGenAppDelegate
//@synthesize window; //viewController
@synthesize window = _window;
@synthesize navigationController = _navigationController;
@synthesize managedObjectModel = __managedObjectModel;
@synthesize managedObjectContext = __managedObjectContext;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;
- (void)dealloc
{
[__managedObjectModel release];
[__managedObjectContext release];
[__persistentStoreCoordinator release];
[_window release];
[_navigationController release];
//[viewController release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
MainViewController *menuVC= [[[MainViewController alloc]init]autorelease];
self.navigationController = [[UINavigationController alloc]initWithRootViewController:menuVC];
//self.window.rootViewController = menuVC;
self.navigationController.navigationBar.hidden = YES;
[self.window addSubview:self.navigationController.view];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
//CD
//Explicitly write Core Data accessors
- (NSManagedObjectContext *) managedObjectContext {
if (__managedObjectContext != nil) {
return __managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
__managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return __managedObjectContext;
}
- (NSManagedObjectModel *)managedObjectModel {
if (__managedObjectModel != nil) {
return __managedObjectModel;
}
__managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return __managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil) {
return __persistentStoreCoordinator;
}
//mi solucto!!
//NSURL *storeURL= [NSURL URLWithString:[[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ClientOcci.sqlite"]];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"db.sqlite" ofType:nil];
NSURL *storeURL = [NSURL URLWithString:filePath];
// NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ClientOcci.sqlite"];
//NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ChildCare_v02.sqlite"]; //actual SDK style for blank db
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return __persistentStoreCoordinator;
}
#pragma mark - Application's Documents directory
// Returns the URL to the application's Documents directory.
+ (NSString*)applicationDocumentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return documentsDirectory;
}
//CD
- (void)applicationWillResignActive:(UIApplication *)application
{
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
}
- (void)applicationWillTerminate:(UIApplication *)application
{
}
@end
クラッシュします:
__managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
EXC_BAD_ACCESS
それで、プロジェクト設定でベースSDK 5.1を作成しようとしましたが、それでもクラッシュしました。
なぜ私のプロジェクトはreturnメソッドとしてURLを好まないのですか?それを修正する方法は?これを新しいSDKに変更すると、他の方法でブレーキがかかりますか?
編集>>私は@ierrorの提案を試みました、
rootVCに追加する:
if (managedObjectContext == nil) {
managedObjectContext = [(QRGenAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
NSLog(@"After managedObjectContext: %@", managedObjectContext);}
しかし、今はappDelegateでクラッシュしています。
の
- (NSManagedObjectModel *)managedObjectModel {
if (__managedObjectModel != nil) {
return __managedObjectModel;
}
__managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]; // crashes here!!!
return __managedObjectModel;
}
何をすべきか?
どうもありがとう!