今時計アプリを作っているんだけど、アプリ内でユーザーの名前を登録できるようにするつもりなんだ。
こういう場合に、同じ名前でもごっちゃにならないように注意する必要があるよね。
だから、ユニークな文字列でも作っておいてそれをベースに管理しようとしたんだ。もちろんユニークといってもぷって笑っちゃうような面白い文字列ってわけじゃないよ。オリジナルっていうか他とかぶらない、って意味ね。
そういう固有の文字列をどうやって作ろうかな、ってのが今日のネタなんだけど、たいしたこと書いてないから最後まで読まなくてもいいよ?
いろいろ方法はあるんだろうけど、、、例えばこんなのを見つけたよ →
objective c - Generate a random alphanumeric string in cocoa - Stack Overflow
まあ動作確認してないけど、うまくいきそうだよね。
ただ、どうせなら作成時のタイムスタンプ的な情報も持たせようと考えたので、登録時の日時を使えばいいじゃんってことで、結局次のようなクラスメソッドを作ったんだ。
+(NSString *)makeUniqueString
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyMMddHHmmss"];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
[dateFormatter release];
int randomValue = arc4random() % 1000;
NSString *unique = [NSString stringWithFormat:@"%@.%d",dateString,randomValue];
return unique;
}
まあなんのことはない、年月日と時分秒を並べているだけなんだけど、一応その後にランダムな数字を追加しといたんだ。
滅多に生じないだろうけど、秒までも同じでこのメソッドをコールしたら同じ文字列になっちゃって、「まともに動かないから★一つ!」とかレビューされたら辛いもんね。
ちなみに、実行するとこんな文字列を返すんだ → 120202091913.519
個人的には数字がずらーっとならんだタイムスタンプよりも、こういう日時とかが並んだ意味ある数字の羅列の方がまだメンテしやすいので気に入ってるんだよね。