gpt4 book ai didi

iphone - SIGABRT 在 NSManagedObjectContext = [NSEntityDescription ...] 之后

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:53:31 24 4
gpt4 key购买 nike

我正在尝试做一些与正在做的事情非常相似的事情 here ,但由于没有给出真正的答案,我想看看是否有人可以帮助我解决我的特定问题。

我只是想将核心数据添加到我现有的应用程序中。以下是我添加到相应文件中的内容。我还概述了当我的应用程序加载时我从哪里获得 SIGABRT。我已验证“loadData”中的上下文变量不为 NULL。

AppDelegate.h

#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
@interface AppDelegate : NSObject <UIApplicationDelegate> {
}

...

@property (readonly, retain, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, retain, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, retain, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
-(void)loadData;
@end

AppDelegate.m

#import "NewModel.h"

@synthesize managedObjectContext = __managedObjectContext;
@synthesize managedObjectModel = __managedObjectModel;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;
...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...

__managedObjectContext = [[NSManagedObjectContext alloc] init];
__managedObjectModel = [[NSManagedObjectModel alloc] init];
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] init];
[__managedObjectContext setPersistentStoreCoordinator:__persistentStoreCoordinator];
[self loadData];
}

- (NSManagedObjectContext *)managedObjectContext {
if (__managedObjectContext) {
return __managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (!coordinator) {
return nil;
}
__managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
return __managedObjectContext;
}


-(void)loadData
{
NSManagedObjectContext *context = [self managedObjectContext];

NSManagedObjectModel *newObj; // Tried NewModel = *newObj; thinking that may resolve
// the issue, didn't work though
newObj = [NSEntityDescription
insertNewObjectForEntityForName:@"NewModel"
inManagedObjectContext:context]; --> SIGABRT WHEN TRYING TO EXECUTE THIS
[newTeam setValue:@"value" forKey:@"modelValue"];
NSError *error;
[context save:&error];
}

新模型.h

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@interface NewModel : NSManagedObject
@property (nonatomic, retain) NSString * modelvalue;
@end

新模型.m

#import "NewModel.h"

@implementation NewModel
@dynamic modelValue;
@end

最佳答案

我上面的代码的问题是我没有正确初始化我的 persistentStoreCoordinator 或 managedObjectModel。以下是曾经添加的两个功能,让我解决了这个问题。

    /**
Returns the managed object model for the application.
If the model doesn't already exist, it is created by merging all of the models found in the application bundle.
*/

- (NSManagedObjectModel *)managedObjectModel {

if (managedObjectModel != nil) {
return managedObjectModel;
}

NSString *path = [[NSBundle mainBundle] pathForResource:@"LocalDatabase" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];

//managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
return managedObjectModel;
}


/**
Returns the persistent store coordinator for the application.
If the coordinator doesn't already exist, it is created and the application's store added to it.
*/
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}

NSString *storePath = [ [self applicationDocumentsDirectory] stringByAppendingPathComponent:@"LocalDatabase.db"];
NSURL *storeUrl = [NSURL fileURLWithPath:storePath];

// Put down default db if it doesn't already exist
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:storePath]) {
NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"LocalDatabase" ofType:@"sqlite"];
if (defaultStorePath) {
[fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
}
}

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;
}

关于iphone - SIGABRT 在 NSManagedObjectContext = [NSEntityDescription ...] 之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9239349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com