OneTimePassword を扱うための Model を追加 - #20
Conversation
|
|
||
| @implementation OneTimePasswordSettings | ||
|
|
||
| + (instancetype)sharedInstance { |
There was a problem hiding this comment.
@ykws
今回はマルチスレッドな実装を行なっていないため、初期化処理に@synchronizedは必要ないのでしょうか?
There was a problem hiding this comment.
@NMai-source とても良い指摘です。
結論としては必要ないです。
@synchronized の代わりに dispatch_once を利用しています。
iOS では、これによってシングルトンを実現できるようになっています。
- dispatch_once
- Objective-Cにおけるシングルトンのお話
- Objective-CのSingleton、その歴史的経緯など - Singletonの実装(簡易版)
| return sharedInstance; | ||
| } | ||
|
|
||
| - (NSString *)generateOneTimePassword { |
| } | ||
|
|
||
| - (NSString *)digitsString { | ||
| return [NSString stringWithFormat:@"%d", (int)self.digits]; |
|
|
||
| #import "SettingController.h" | ||
| #import "SettingsTableViewCell.h" | ||
| #import "ViewController.h" |
| AlgorithmItem, | ||
| DigitsItem, | ||
| PeriodItme, | ||
| PeriodItem, |
| #pragma mark - Table view delegate | ||
|
|
||
| - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { | ||
| // FIXME: タップしても反応しないことがある |
There was a problem hiding this comment.
設定画面の任意のセルをタップしても didSelectRowAtIndexPath が呼ばれなくて Picker の初期表示位置が意図した通りにできないことがあります。
#17 Model を追加とは別で、 TableView+Picker の課題なので、別途 Issue を作成して対応します。
| @interface ViewController : UIViewController | ||
| @property (nonatomic) NSString *algorithm; | ||
| @property (nonatomic) NSString *digits; | ||
| @property (nonatomic) NSString *period; |
There was a problem hiding this comment.
| @property (weak, nonatomic) IBOutlet UILabel *oneTimePasswordLabel; | ||
| @property (weak, nonatomic) IBOutlet UAProgressView *oneTimePasswordProgressView; | ||
| @property (nonatomic, assign) CGFloat localProgress; | ||
| @property (nonatomic) float scheduledTimerWithTimeInterval; |
There was a problem hiding this comment.
| if([_period isEqualToString:@"60"]) { | ||
| self.scheduledTimerWithTimeInterval = 0.06f; | ||
| } | ||
| } |
There was a problem hiding this comment.
| [self.oneTimePasswordLabel setText:password]; | ||
|
|
||
| NSTimeInterval timeInterval = self.settings.period / 1000; | ||
| [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(updateOneTimePasswordView:) userInfo:nil repeats:YES]; |
|
@NMai-source レビューをお願いできますでしょうか? |
| sharedInstance.issuer = issuer; | ||
| sharedInstance.algorithm = [OTPToken defaultAlgorithm]; | ||
| sharedInstance.digits = [OTPToken defaultDigits]; | ||
| sharedInstance.period = [OTPToken defaultPeriod]; |
|
|
||
| _localProgress = newProgress; | ||
| [self.oneTimePasswordProgressView setProgress:_localProgress animated:NO]; | ||
|
|
| // 設定の文字列から保存できるようにする | ||
| - (void)saveAlgorithmString:(NSString *)algorithmString; | ||
| - (void)saveDigitsString:(NSString *)digitsString; | ||
| - (void)savePeriodString:(NSString *)periodString; |
| + (instancetype)sharedInstance { | ||
| static OneTimePasswordSettings *sharedInstance = nil; | ||
| static dispatch_once_t onceToken; | ||
| dispatch_once(&onceToken, ^{ |
NMai-source
left a comment
There was a problem hiding this comment.
@ykws
お疲れ様です。
遅くなりましたが、一通り修正内容の確認が完了しました。
| return token.password; | ||
| } | ||
|
|
||
| - (NSString *)algorithmString { |
There was a problem hiding this comment.
以下のコンバートの責務は Converter に切り離して、ここではそれを呼ぶだけにしても良さそう
- algorithmString: OTPAlgorithm -> NSString
- digitsString: NSUInteger -> NSString
- periodString: NSTimeInterval -> NSString
- saveAlgorithmString: NSString -> OTPAlgorithm
- saveDigitsString: NSString -> NSUInteger
- savePeriodString: NSString -> NSTimeInterval
対応内容
未対応事項
didSelectRowAtIndexPathが呼ばれていないスクリーンショット
変更なし