有一种方便的方式来访问插入到 storyboard 容器视图的子控制器:
// 1. A property has the same name as a segue identifier in XIB
@property (nonatomic) ChildViewController1 *childController1;
@property (nonatomic) ChildViewController2 *childController2;
// #pragma mark - UIViewController
- (void)prepareForSegue:(UIStoryboardSegue *)segue
sender:(id)sender
{
[super prepareForSegue:segue sender:sender];
// 2. All known destination controllers assigned to properties
if ([self respondsToSelector:NSSelectorFromString(segue.identifier)]) {
[self setValue:segue.destinationViewController forKey:segue.identifier];
}
}
- (void)viewDidLoad {
[super viewDidLoad];
// 3. Controllers already available bc viewDidLoad is called after prepareForSegue
self.childController1.view.backgroundColor = [UIColor redColor];
self.childController2.view.backgroundColor = [UIColor blueColor];
}
NSDateFormatter +dateFormatFromTemplate:options:locale:
友情提示:如果你在使用 NSDateFormatter -setDateFormat:
而不同时使用NSDateFormatter +dateFormatFromTemplate:options:locale:
那么你很可能做错了。
文档是这样的:
Objective-C
+ (NSString *)dateFormatFromTemplate:(NSString *)template
options:(NSUInteger)opts
locale:(NSLocale *)locale
不同的语言对时间要素有不同的规范。你用这个方法来得到某个特定语言(通常使用当前的语言 - 参看 currentLocale)给定的时间要素的正确字符串格式。
NSBundle -preferredLocalizations
有时候,你需要知道你的应用程序在什么语言环境下运行。通常,人们会用 NSLocale +preferredLanguages
。不幸的是这除了告诉你应用程序实际上显示的语言之外一无所知。它只是给你 iOS 中 "Settings → General → Language & Region → Preferred Language" 或是 OS X 里 "System Preferences → Language & Region → Preferred Languages" 同样的有序列表。
想象一下如果首选语言顺序是 {英语, 法语}
但是你的应用程序只支持德语。调用[NSLocale preferredLanguages] firstObject]
会返回英语而不是你想要的德语。
得到应用程序使用的准确语言环境的正确方式是使用 [[NSBundle mainBundle] preferredLocalizations]
。
文档是这么说的:
一个 NSString
对象的数组包含了 bundle 里的区域语言 ID。这些字符串是按用户系统设置和可用本地化来排序的。
NSBundle.h
里的注释说:
这个 bundle 本地化的子集,会对这个进程的当前执行环境的优先顺序上重新排序;主 bundle 的首选本地化显示了用户是最有可能在 UI 看到的语言(文本)
你大概还需要使用 NSLocale +canonicalLanguageIdentifierFromString:
来确保规范的语言标识。
阻止 dylib 钩子
来自 Sam Marshall 的这一招使黑客的生活更艰难:> >
把这一行加到你的 "Other Linker Flags" 里:
-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null
揭露 CocoaPods!
有一个快速方法来检查(闭源)应用程序使用的所有源:
$ class-dump -C Pods_ /Applications/Squire.app | grep -o "Pods_\w+"
不需要重新编译的重新运行
如果你一遍又一遍的调试同样的问题,你可以不重新编译就运行你的应用程序: "Product > Perform Action > Run without Building" (⌘⌃R
)