我创建了一个函数,可以从设备名称中提取用户名。
这个想法是跳过设置步骤,让用户直接进入播放在第一次启动应用程序。
这是一种次优方法,因为我永远无法信任设备名称来保存用户名称。问题是:还有什么更好的方法
我下面的函数得到了正确的名称...
- ...如果设备的默认名称未更改(“Sanna's iPod”)
- ......用英语说,
- .法语和类似语言(“iPod de Sanna”)
- ...在瑞典语和类似语言(“Sannas iPod”)中,如果名称不以S结尾(“Johannes iPod”=〉返回“Johannes”,但应该返回“Johannes”才是正确的,因为名称本身以S结尾)。
如果用户将设备的名称更改为默认形式以外的其他名称,则显然无法正确获得名称。
- (NSString *) extractPlayerNameFromDeviceName: (NSString *) deviceName {
// get words in device name
NSArray *words = [deviceName componentsSeparatedByString:@" "];
NSMutableArray *substrings = [[NSMutableArray alloc] init];
for (NSString *word in words) {
NSArray *subwords = [word componentsSeparatedByString:@"'"];
[substrings addObjectsFromArray:subwords];
}
// find the name part of the device name
NSString *playerName = [NSString stringWithString: @""];
for (NSString *word in substrings) {
if ([word compare:@"iPhone"] != 0
&& [word compare:@"iPod"] != 0
&& [word compare:@"iPad"] != 0
&& [word length] > 2) {
playerName = word;
}
}
// remove genitive
unichar lastChar = [playerName characterAtIndex:[playerName length] - 1];
if (lastChar == 's') {
playerName = [playerName substringToIndex:[playerName length] - 1];
}
lastChar = [playerName characterAtIndex:[playerName length] - 1];
if (lastChar == '\'') {
playerName = [playerName substringToIndex:[playerName length] - 1];
}
return playerName;
}
我用它来建议我的应用程序中的用户名。这样,大多数用户就不必费心写他们的用户名了。
我的应用没有连接到iTunes或Facebook等任何其他服务,但每个用户都需要一个用户名。那么我如何获取用户名呢?
7条答案
按热度按时间kninwzqo1#
我想对里奇·赫勒格森的答案做一个改进,它有以下特点:
下面是代码:
使用此函数返回名称;
这有点复杂,我会解释的
1.正则表达式包含三个部分;
1.在字符串的开头,匹配但不返回"iPhone"、"iPod"、"iPad"或"phone"以及可选单词"de"。
1.在字符串的末尾,匹配并返回一个单词,该单词后跟可选的"'s"(不返回),然后是"iPad"、"iPhone"、"iPod"或"phone"(也不返回)。
1.这个匹配和前面的一样,但是它应该可以用于中文设备名称。(改编自Travis Worm提交的文件。如果有错请告诉我。)
1.匹配并返回任何不符合前面规则的单词。
1.迭代所有匹配项,将它们大写并添加到数组中。
1.返回数组。
如果一个名字以"s"结尾,而在"iPad"等之前没有撇号,我不会试图改变它,因为没有万无一失的方法来弄清楚"s"是名字的一部分还是名字的复数形式。
好好享受吧!
6yoyoihd2#
这里有一个替代方法,它可以获取所有的名字。而且,它不会删除使用“de”或“s”的语言末尾的“s”。而且,它会将每个名字的第一个字母大写。
方法实施:
用法:
w8ntj3qf3#
Swift 5 +本地化
这里有一个更新,因为我也想个性化一个入职和简化联系人导入过程中的应用程序意味着在认知下降。更多细节/缺陷/修订随着时间的推移are kept in a Gist。
w6lpcovy4#
我已经将原来的
Owen Godfrey
答案转换为Swift,并更新了Regexpr以支持更多模式,如User's iPhone 6S
或iPhone 5 de User
...我在这里创建了一个要点:https://gist.github.com/iGranDav/8a507eb9314391338507
db2dz4w85#
如果它只适用于iPod和iPhone,那么为什么还要使用用户名呢?如果你需要为你的网络服务识别设备,那么每个设备都有其他的唯一值(比如UDID)。另一个选择是让用户从地址簿中选择一个代表他们自己的联系人并使用这些数据。
axzmvihb6#
gfttwv5a7#
由于iOS 16,你无法访问用户为手机指定的名称,只能获取设备的通用名称。这是因为苹果推出了新的隐私功能。不过,如果你的应用程序需要这些信息,你可以申请获取这些信息的权利。
标准是:
参见完整文档:
希望这对正在努力想办法获得这个名字的人有帮助:)