0
核心數據庫跟蹤用戶信息,目標是使用核心數據登錄,很簡單 模擬應用程序並登錄完美 Xcode不顯示任何錯誤或警告忽略「無法在NSManagedObject類上調用指定初始值設定項
控制檯輸出顯示: 未能呼籲NSManagedObject類「登錄」 我可以忽略此輸出指定初始化?
Login.h和Login.m由Xcode中本身產生數據模型
Login.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class User;
@interface Login : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * password;
@property (nonatomic, retain) User *user;
+ (User *)loginWithEmail:(NSString *)email withPassword:(NSString *)password inManagedObjectContext:(NSManagedObjectContext *)context;
@end
Login.m
#import "Login.h"
#import "User.h"
@interface Login()
- (User *)isValidEmail:(NSString *)email inManagedObjectContext:(NSManagedObjectContext *)context;
@end
@implementation Login
@dynamic password;
@dynamic user;
- (User *)isValidEmail:(NSString *)email inManagedObjectContext:(NSManagedObjectContext *)context
{
User *user = nil;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:context];
request.predicate = [NSPredicate predicateWithFormat:@"email = %@", email];
NSError *error = nil;
user = [[context executeFetchRequest:request error:&error] lastObject];
[request release];
return user;
}
+ (User *)loginWithEmail:(NSString *)email withPassword:(NSString *)password inManagedObjectContext:(NSManagedObjectContext *)context
{
Login *loginHelper = [[Login alloc] init];
User *user = nil;
if ((user = [loginHelper isValidEmail:email inManagedObjectContext:context])) {
if ([user.login.password isEqualToString:password]) {
// correct login
} else {
// invalid password
user = nil;
}
} else {
// user does not exist
user = nil;
}
[loginHelper release];
return user;
}
@end
我現在看到了錯誤。我把它放在Login中,因爲它是快速和髒的編碼,重構將遵循:)我需要helperLogin來訪問實例方法isValidEmail:inManagedObjectContext:我將不得不重新考慮我的架構。謝謝 ! – mmvie
剛剛看了一下NSManagedObject的Apple文檔 - 如果你看一下子類化筆記:「重要提示:這個方法是NSManagedObject的指定初始化方法,你不能簡單地通過發送init來初始化一個託管對象。 – isaac
很高興能幫到你! – isaac