XCode で iOS アプリのログイン ページを作成しています。画面にはログイン ボタンと、ユーザー名とパスワードのテキスト フィールドがあります。ボタンをクリックすると、ユーザー認証が実行され、ユーザーは次の画面に進むことができるはずです。私は次のコードを使用しています:
-(IBAction)validateLogin:(id)sender
{ Gusr = @"";
Gpass = @"";
const char *dbpath = [mDatabasePath UTF8String];
sqlite3_stmt *statement;
if (sqlite3_open(dbpath, &mDiary) == SQLITE_OK)
{
NSString *querySQL = [NSString stringWithFormat:
@"SELECT mPassword FROM USERDETAIL WHERE mUserName=\"%@\"",
mUserName.text];
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(mDiary,
query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
Gusr = [[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
Gpass = [[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)];
// NSLog(@"'%@'",Gusr);
// NSLog(@"'%@'",Gpass);
if ([mUserName.text isEqualToString:Gusr] && [Gpass isEqualToString:mPassword.text]){
[self performSegueWithIdentifier:@"Login" sender:self];
}else {
NSLog(@"not valid");
}
sqlite3_finalize(statement);
}
sqlite3_close(mDiary);
}
}
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"Login"]) {
// Get destination view
dashboardViewController *vc = [segue destinationViewController];
// Get button tag
NSInteger tagIndex = [(UIButton *)sender tag];
// Set the selected button in the new view
// [vc setSelectedButton:tagIndex];
}
}
ビルドを実行すると、次の例外が発生します: キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: ' * -[NSPlaceholderString initWithUTF8String:]: NULL cString'
問題は正確には何ですか?また、例外が修正されたとしても、このコードはログインを正常に実行しても問題ありませんか?