小编Jia*_*Yow的帖子

使用NSLocalizedString的最佳实践

我(和所有其他人一样)使用NSLocalizedString本地化我的应用程序.

不幸的是,有几个"缺点"(不一定是NSLocalizedString本身的错误),包括

  • Xcode中的字符串没有自动完成功能.这使得工作不仅容易出错而且令人厌烦.
  • 您可能最终只是因为您不知道已经存在的等效字符串而重新定义字符串(即"请输入密码"与"先输入密码")
  • 类似于自动完成问题,你需要"记住"/ copypaste注释字符串,否则genstring最终会有一个字符串的多个注释
  • 如果要genstring在已经对某些字符串进行本地化后使用,则必须小心不要丢失旧的本地化.
  • 在整个项目中,相同的字符串分散.例如,您NSLocalizedString(@"Abort", @"Cancel action")在任何地方都使用过,然后Code Review要求您重命名字符串NSLocalizedString(@"Cancel", @"Cancel action")以使代码更加一致.

我所做的(以及经过一些搜索后,我认为很多人这样做)是有一个单独的strings.h文件,我#define所有的本地化代码.例如

// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);
Run Code Online (Sandbox Code Playgroud)

这基本上提供了代码完成,一个更改变量名称的位置(因此不再需要genstring),以及一个自动重构的唯一关键字.但是,这需要花费大量结果来解决一系列#define非固有结构的语句(例如LocString.Common.Cancel或类似的东西).

所以,虽然这有点好,但我想知道你们是如何在你的项目中做到的.是否有其他方法可以简化NSLocalizedString的使用?甚至可能有一个封装它的框架?

localization objective-c nslocalizedstring ios

134
推荐指数
3
解决办法
7万
查看次数

h5py:切片阵列数据集的正确方法

我在这里有点困惑:

据我所知,h5py的.value方法读取整个数据集并将其转储到一个数组中,这个数组很慢而且不鼓励(通常应该替换为[()].正确的方法是使用numpy-esque切片.

但是,我得到了令人不快的结果(使用h5py 2.2.1):

import h5py
import numpy as np
>>> file = h5py.File("test.hdf5",'w')
# Just fill a test file with a numpy array test dataset
>>> file["test"] = np.arange(0,300000)

# This is TERRIBLY slow?!
>>> file["test"][range(0,300000)]
array([     0,      1,      2, ..., 299997, 299998, 299999])
# This is fast
>>> file["test"].value[range(0,300000)]
array([     0,      1,      2, ..., 299997, 299998, 299999])
# This is also fast
>>> file["test"].value[np.arange(0,300000)]
array([     0,      1,      2, ..., 299997, 299998, 299999])
# This …
Run Code Online (Sandbox Code Playgroud)

python numpy h5py

11
推荐指数
1
解决办法
9667
查看次数

APNS令牌应该加密吗?

所以,我想知道,因为用户将APNS令牌发送给APNS提供商以接收推送通知,是否应加密令牌?SSL是否必要?

据我所知,令牌中没有真正的敏感数据.如果某人实际设法从用户​​嗅探令牌,他仍然必须获得我的推送证书.如果他设法这样做(他不会;-))他所能做的就是向这个特定用户发送垃圾邮件通知.那是对的吗?还是我错过了什么?

另外,我认为根据APNS令牌识别设备(或更重要的是,用户)是不可能的?

因此,我想确保,如果有人从我的一个客户端嗅探推送通知注册(注册包含APNS令牌和用户感兴趣的信息,并且连接未加密,因此所有内容都以纯文本形式可读). ..

  • 他仍然必须获得我的推送证书才能以任何方式打扰我的客户
  • 他知道有人对这些信息感兴趣,但无法确定我的客户是谁

我可以放心吗?提前致谢!

security apple-push-notifications ios

8
推荐指数
1
解决办法
1402
查看次数

NSPredicate忽略了空格

我需要使用NSPredicate匹配两个字符串,不区分大小写,变音符号不敏感和空格不敏感.

谓词看起来像这样:

[NSPredicate predicateWithFormat:@"Key ==[cdw] %@", userInputKey];
Run Code Online (Sandbox Code Playgroud)

'w'修饰符是一种发明的修饰符来表达我想要使用的内容.

我不能只修剪它,userInputKey因为数据源"Key"值也可能在它们中有空格(它们需要那些空格,我不能事先修剪它们).

例如,给定一个userInputKey"abc",谓词应匹配所有

{"abc", "a b c", " a B    C   "}
等等.给定userInputKey"a B C",谓词也应该匹配上面集合中的所有值.

这不可能这么难,可以吗?

whitespace cocoa-touch objective-c nspredicate

7
推荐指数
1
解决办法
2024
查看次数

全局设置特定时区以供应用程序使用

我正在编写一个应用程序,需要显示和计算欧洲特定时区的所有日期,时间,时间间隔等.意思是,如果我在巴黎说,该应用程序现在可以完美运行,但是如果我去纽约,该应用程序应该显示和工作,就像我还在巴黎一样.

天真地,我试过(在application: didFinishLaunchingWithOptions:功能中)

[[NSCalendar currentCalendar] setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Paris"]];
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用,如果没有明确说明,我所有的NSDateFormatter对象仍然使用当前时区.

所以,我想知道的是:

  • 有没有办法在应用程序中全局实施时区?如果还有其他方法,我宁愿不通过我的所有代码并修复每个日期格式化程序和日期选择器等等.

  • [NSTimeZone timeZoneWithName:@"Europe/Paris"]在CET和CEST之间正确切换吗?

谢谢!

nsdate nsdateformatter nstimezone ios

4
推荐指数
1
解决办法
4422
查看次数

stringByReplacingOccurrencesOfString中替换的字符串数

使用stringByReplacingOccurrencesOfString:时,是否有办法获取已替换的字符串数?

当然我可以在使用替换之前搜索字符串,但由于替换可能执行相同的搜索,因此在替换字符串时计算字符串会更有效吗?

cocoa objective-c ios

0
推荐指数
1
解决办法
169
查看次数