NSUUID小写字符

时间:2014-01-27 16:20:37

标签: objective-c cocoa nsstring nsuuid

我在我的应用中使用NSUUID来表示唯一ID:

[[NSUUID UUID] UUIDString]

和预期的结果一样,我得到一个像这样的id:102A21AD-7216-4517-8A79-39776B767E72

对于后端原因,我需要uuid中的字母为小写。我试着打电话给

[[NSUUID UUID] UUIDString].lowercaseString 

但返回的字符串为空。

我是否真的必须遍历字符串中的所有字符并将适当的字符转换为小写?如果有的话,是否有人建议采用最有效的方法来做到这一点?

修改

我试图实现这个的方法是通过继承NSUUID然后重写

-(NSString*) UUIDString; 

方法

我的实现是

-(NSString*) UUIDString{
    return [super UUIDString].lowercaseString;
}

接受的答案解释了为什么这不起作用。

3 个答案:

答案 0 :(得分:3)

根据您对问题的编辑,我们需要进行一些调查......

看起来NSUUID的行为类似于类集群,如果不实现它的关键方法并自己提供UUID生成功能,则无法对其进行子类化。如果你对它进行子类化,你会得到一个父类,其UUIDString是空字符串。虽然该类的标准init会为您提供__NSConcreteUUID的实例,但UUIDString更有用!

如果上述情况令人困惑,则以下部分实现显示了一种方法:

@interface LowerUUID : NSUUID
@end

@implementation LowerUUID
{
   NSUUID *real;
}

- (id) init
{
   self = [super init];
   if (self)
      real = NSUUID.new;
   return self;
}

- (NSString *) UUIDString
{
   NSString *original = [real UUIDString];
   NSString *lower = original.lowercaseString;
   return lower;
}

@end

要完成,您还需要提供其他方法的实现。

对于这个特殊的类,你不太可能发现它值得,但对于像NSMutableArray这样的类集群它确实有意义。

您可以向Apple提交错误报告,说明文档并未声明您不能轻易地将子类NSUUID分类。

答案 1 :(得分:2)

这对我有用:

NSString *lower = [[[NSUUID UUID] UUIDString] lowercaseString];

答案 2 :(得分:2)

我尝试了它并且有效:

NSString *str = [[NSUUID UUID] UUIDString];
NSLog(@"1: %@", str);
NSLog(@"2: %@", str.lowercaseString);