ios – entityForName:nil不是合法的NSManagedObjectContext参数,用于搜索实体名称“Account”

ios – entityForName:nil不是合法的NSManagedObjectContext参数,用于搜索实体名称“Account”,第1张

概述我已经尝试了很多选项,但找不到此问题的解决方案.我创建了一个Core Data文件,并命名为实体Account,创建一个名为username的字符串属性.然后将实体的类编辑为NSManagedObject,不知道这是否正确.现在,我的LoginViewController中有以下代码: - (void)viewDidLoad{ [super viewDidLoad]; ITAp 我已经尝试了很多选项,但找不到此问题的解决方案.我创建了一个Core Data文件,并命名为实体Account,创建一个名为username的字符串属性.然后将实体的类编辑为NSManagedobject,不知道这是否正确.现在,我的LoginVIEwController中有以下代码:
- (voID)vIEwDIDLoad{    [super vIEwDIDLoad];    ITAppDelegate *appDelegate = (ITAppDelegate *)[[UIApplication sharedApplication] delegate];    NSManagedobjectContext *context = appDelegate.managedobjectContext;    Account *newAccount = [NSEntityDescription insertNewObjectForEntityForname:@"Account" inManagedobjectContext:context];    [newAccount setValue:@"Jorge" forKey:@"username"];    [newAccount setPassword:@"password"];    NSLog(@"username:%@   password: %@",[newAccount username],[newAccount password]);}

我跟着This Tutorial,我的代码文件如下所示:

ITAppDelegate.h

#import <UIKit/UIKit.h>@interface ITAppDelegate : UIResponder <UIApplicationDelegate>@property (strong,nonatomic) UIWindow *window;@property (Readonly,strong,nonatomic) NSManagedobjectContext *managedobjectContext;@property (Readonly,nonatomic) NSManagedobjectModel *managedobjectModel;@property (Readonly,nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;@end

ITAppDelegate.m

#import "ITAppDelegate.h"#import "LoginVIEwController.h"@implementation ITAppDelegate@synthesize managedobjectContext = _managedobjectContext;@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;@synthesize managedobjectModel = _managedobjectModel;- (BOol)application:(UIApplication *)application dIDFinishLaunchingWithOptions:(NSDictionary    *)launchOptions{    // OverrIDe point for customization after application launch.    return YES;}#pragma mark - Core Data stack- (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;}NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"];_managedobjectModel = [[NSManagedobjectModel alloc] initWithContentsOfURL:modelURL];return _managedobjectModel;}- (NSPersistentStoreCoordinator *)persistentStoreCoordinator{if (_persistentStoreCoordinator != nil){    return _persistentStoreCoordinator;}    return _persistentStoreCoordinator;}@end

AccountBase.h

#import <UIKit/UIKit.h>#import <CoreData/CoreData.h>@interface AccountBase : NSManagedobject@property (nonatomic,retain) Nsstring *username;@end

AccountBase.m

#import "AccountBase.h"@implementation AccountBase@dynamic username;@end

Account.h

#import "AccountBase.h"#import <CoreData/CoreData.h>@interface Account : AccountBase@property (nonatomic,assign) Nsstring *password;@end

Account.m

#import "Account.h"#import "KeychainHelper.h"@implementation Account- (Nsstring*)password{    if (self.username)        return [KeychainHelper getpasswordForKey:self.username];    return nil;}- (voID)setPassword:(Nsstring*)aPassword{    if (self.username)        [KeychainHelper setPassword:aPassword forKey:self.username];}- (voID)prepareForDeletion{    if (self.username)        [KeychainHelper removePasswordForKey:self.username];}@end

KeychainHelper.h

#import <Foundation/Foundation.h>@interface KeychainHelper : NSObject+ (Nsstring*)getpasswordForKey:(Nsstring*)aKey;+ (voID)setPassword:(Nsstring*)aPassword forKey:(Nsstring*)aKey;+ (voID)removePasswordForKey:(Nsstring*)aKey;@end

KeychainHelper.m

#import "KeychainHelper.h"#import <Security/Security.h>@interface KeychainHelper ()+ (NSMutableDictionary*)dictionaryForKey:(Nsstring*)aKey;@end@implementation KeychainHelperstatic const Nsstring *ironTrainers = @"com.domain.myapplication";+ (NSMutableDictionary*)dictionaryForKey:(Nsstring*)aKey{    NSData *encodedKey = [aKey dataUsingEnCoding:NSUTF8StringEnCoding];    NSMutableDictionary *searchDictionary = [NSMutableDictionary dictionary];    [searchDictionary setobject:(__brIDge ID)kSecclassGenericPassword forKey:(__brIDge ID)kSecclass];    [searchDictionary setobject:encodedKey forKey:(__brIDge ID)kSecAttrGeneric];    [searchDictionary setobject:encodedKey forKey:(__brIDge ID)kSecAttrAccount];    [searchDictionary setobject:ironTrainers forKey:(__brIDge ID)kSecAttrService];    return searchDictionary;}  + (Nsstring*)getpasswordForKey:(Nsstring*)aKey{    Nsstring *password = nil;    NSMutableDictionary *searchDictionary = [self dictionaryForKey:aKey];    [searchDictionary setobject:(__brIDge ID)kSecMatchlimitOne forKey:(__brIDge ID)kSecMatchlimit];    [searchDictionary setobject:(ID)kcfBooleanTrue forKey:(__brIDge ID)kSecReturnData];    CFTypeRef result = NulL;    BOol statusCode = SecItemcopyMatching((__brIDge CFDictionaryRef)searchDictionary,&result);    if (statusCode == errSecSuccess) {        NSData *resultData = CFBrIDgingrelease(result);        password = [[Nsstring alloc] initWithData:resultData enCoding:NSUTF8StringEnCoding];    }    return (__brIDge Nsstring *)(result);}+ (voID)removePasswordForKey:(Nsstring*)aKey{    NSMutableDictionary *keyDictionary = [self dictionaryForKey:aKey];    SecItemDelete((__brIDge CFDictionaryRef)keyDictionary); }+ (voID)setPassword:(Nsstring*)aPassword forKey:(Nsstring*)aKey{    [KeychainHelper removePasswordForKey:aKey];    NSData *encodedPassword = [aPassword dataUsingEnCoding:NSUTF8StringEnCoding];    NSMutableDictionary *keyDictionary = [self dictionaryForKey:aKey];    [keyDictionary setobject:encodedPassword forKey:(__brIDge ID)kSecValueData];    SecItemAdd((__brIDge CFDictionaryRef)keyDictionary,nil);}@end

任何帮助赞赏.谢谢.

解决方法
- (NSManagedobjectContext *)managedobjectContext{    if (managedobjectContext != nil) return managedobjectContext;    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];    if (coordinator != nil) {        managedobjectContext = [[NSManagedobjectContext alloc] init];        [managedobjectContext setPersistentStoreCoordinator:coordinator];    }    return managedobjectContext;}

>你没有提供一个延迟加载的persistentStoreCoordinator实现
>所以协调员总是没有
所以你总是从这个方法返回零
这意味着你会总是得到上面的错误.

解释错误:

+entityForname: nil is not a legal NSManagedobjectContext parameter searching for entity name ‘Account’

阅读它不是很明显,但这意味着,对于托管对象上下文来说,这不是一个合法的东西.一读,看起来你正在做entityForname:nil,但事实并非如此.

要解决此问题,您需要提供一个有效的持久性存储协调器.我有一篇小文章here,它解释了你需要多少代码来设置核心数据堆栈,这可能会帮助你.

总结

以上是内存溢出为你收集整理的ios – entityForName:nil不是合法的NSManagedObjectContext参数,用于搜索实体名称“Account”全部内容,希望文章能够帮你解决ios – entityForName:nil不是合法的NSManagedObjectContext参数,用于搜索实体名称“Account”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1112059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存