31

当针对模拟器而不是我的设备时,是否有一个编译器指令可以用来编译不同的代码行。就像是:

# IF SIMULATOR
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
# ELSE
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
# END

编辑

直接链接到文档。

4

3 回答 3

57
#if TARGET_IPHONE_SIMULATOR
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
#else
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
#endif
于 2009-05-14T19:57:05.170 回答
11

更新:(已弃用/过时)这只工作了几年,不再工作了。(10 多年后)

作为记录,这是 Apple 在其一些官方示例代码中使用的另一种方法:

#if TARGET_CPU_ARM
  // Only executes on an iPhone or iPod touch device
  [self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
#else
  // Only executes on the Simulator
  [self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
#endif
于 2009-05-14T21:03:41.530 回答
5

对于那些寻找现代 Swift 解决方案的人来说,(新的)平台条件targetEnvironment在这里提供了明确的答案。例如:

#if targetEnvironment(simulator)
self.imagePicker.sourceType = .photoLibrary
#else
self.imagePicker.sourceType = .camera
#endif 

目标环境平台条件功能由SE-0190引入,自Swift 4.1起可用。

于 2018-07-31T20:16:35.863 回答