我有以下代码可以在应用启动时检查有效的FingerPrint。我正在使用Xamarin.Forms。
PlatformSpecific(Xamarin.iOS)
- (void)viewDidLoad {
[super viewDidLoad];
NSString *strPath = [[NSBundle mainBundle] pathForResource:@"issues" ofType:@"csv"];
NSString *strFile = [NSString stringWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:nil];
if (!strFile) {
NSLog(@"Error reading file.");
}
issues = [[NSArray alloc] init];
issues = [strFile componentsSeparatedByString:@","];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return[issues count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *simpleTableIdentifier = @"SimpleTableCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
cell.textLabel.text = [issues objectAtIndex:indexPath.row];
return cell;
}
基于public bool IsValidTouchID()
{
var replyHandler = new LAContextReplyHandler((success, er) =>
{
if (success)
{
isSuccess = true;
}
else
{
isSuccess = false;
}
});
context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, "Enter Touch ID", replyHandler);
return isSuccess;
}
我必须导航到不同的页面。由于它是一个回调函数,它首先返回方法,然后调用replyHandler
。因此总是返回replyHandler
。
我试过异步,等待但我无法实现它。
答案 0 :(得分:2)
您可以使用TaskCompletionSource:
public Task<bool> IsValidTouchIDAsync()
{
var tcs = new TaskCompletionSource<bool>();
var replyHandler = new LAContextReplyHandler((success, er) => tcs.SetResult(success);
context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, "Enter Touch ID", replyHandler);
return tcs.Task;
}
请注意,该方法现在是异步的,因此调用者必须等待它。