- (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”所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)