マルチユーザーiPhoneアプリを作成していて、処理中のユーザーログインのコーディングを完了しようとしています。アカウントを正常に作成し、ユーザーが入力したデータをCore Data DBに保存し、ピンをキーチェーンに保存できるので、ログインプロセスを完了しようとしています。以下にリストされている次のコードは、私がこれまでに持っているものです。エラーが発生します。「アカウント」の@interfaceが表示されないため、セレクター「パスワード」が宣言されます。
- (IBAction)processLogin:(id)sender {
// hide keyboard
[_textFieldUsername resignFirstResponder];
[_textFieldPin resignFirstResponder];
// First - make activity indicator visible, then start animating, then turn of wrong user / pin label
_welcomeActivityIndicator.hidden = FALSE;
[_welcomeActivityIndicator startAnimating];
[_wrongUserPin setHidden:YES];
// check if username and pin text fields are populated
if ([_textFieldUsername.text length ] == 0 && [_textFieldPin.text length ] == 0)
{
[_welcomeActivityIndicator stopAnimating];
[_wrongUserPin setHidden:NO];
}
// CORE DATA
// NSManagedObjectContext *context = _managedObjectContext;
NSFetchRequest *request= [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Account" inManagedObjectContext:_managedObjectContext];
NSPredicate *predicate =[NSPredicate predicateWithFormat:@"username=%@",self.textFieldUsername.text];
// TODO check pin
Account *pinAccount = [[Account alloc] init];
// GETTING ERROR ON BELOW LINE OF CODE! - ERR0R - No visible @interface for 'Account' declares the selector 'password:'
[pinAccount password:_textFieldPin.text];
[request setEntity:entity];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *array = [_managedObjectContext executeFetchRequest:request error:&error];
if (array != nil) {
NSUInteger count = [array count]; // may be 0 if the object has been deleted.
NSLog(@"Username may exist, %@",count);
}
else {
NSLog(@"Username does not exist.");
}
}
Accountクラスファイルmおよびhは、次のようになります。
Account.m
- (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
Account.h
#import "AccountBase.h"
@interface Account : AccountBase {
}
// nonatomic - don't worry about multithreading
@property (nonatomic, assign) NSString *password;
- (void)setPassword:(NSString*)aPassword;
@end
アイデアや考えをいただければ幸いです。お読みいただきありがとうございます。