小编Leg*_*ess的帖子

Objective-C中nullable,__nullable和_Nullable之间的区别

使用Xcode 6.3,引入了新的注释,以便更好地表达Objective-C中API的意图(并确保更好的Swift支持).那些注释当然是nonnull,nullablenull_unspecified.

但是使用Xcode 7,会出现很多警告,例如:

指针缺少可为空类型说明符(_Nonnull,_Nullable或_Null_unspecified).

除此之外,Apple使用另一种类型的可为空性说明符,标记其C代码(源代码):

CFArrayRef __nonnull CFArrayCreate(?CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);

总而言之,我们现在拥有这3种不同的可空性注释:

  • nonnull,nullable,null_unspecified
  • _Nonnull,_Nullable,_Null_unspecified
  • __nonnull,__nullable,__null_unspecified

即使我知道为什么以及在哪里使用哪个注释,我也会对我应该使用哪种类型的注释,在哪里以及为什么感到困惑.这是我可以收集的:

  • 对于我应该使用性质nonnull,nullable,null_unspecified.
  • 对于我应该使用方法参数nonnull,nullable,null_unspecified.
  • 对于C方法我应该使用__nonnull,__nullable,__null_unspecified.
  • 对于其他情况,如双指针,我应该使用_Nonnull,_Nullable,_Null_unspecified. …

nullable objective-c objective-c-nullability

144
推荐指数
4
解决办法
4万
查看次数

Xcode 6 - 如何为Ad-Hoc分发选择签名证书/配置文件?

要将应用程序分发给我们的测试人员,我们使用Xcode,我们使用以下过程:

  • 存档申请
  • 分发Ad-Hoc
  • 选择配置文件
  • 将.ipa保存到文件夹

但是使用Xcode 6,这个工作流程发生了一些变化.我仍然可以选择Ad-Hoc分发选项,但我无法选择我想要的配置文件.这使我们无法控制使用哪个签名证书和配置文件配置(我们使用推送通知).

默认情况下,使用iPhone distribution签名身份并XC Ad Hoc生成某种配置配置文件,如下图所示:出口IPA 如果单击配置配置文件附近的箭头,则会打开包含配置配置文件的文件夹.

所以我的问题是:

Xcode 6中是否有任何方法可以选择Ad Hoc分发使用的配置文件?

谢谢!

ios xcode6 ios8

143
推荐指数
8
解决办法
9万
查看次数

iOS 7 UINavigationController推动动画阴影

在iOS 7中,创建了一个新的推送动画,它将推动的视图控制器滑动到层次结构的顶部.但是当动画发生时,iOS显然会做两件事来修改顶视图控制器的设计:

添加阴影:

动画时视图控制器的阴影

底部视图控制器上有一个灯罩:

灯罩

在大多数应用中,这不是问题.但是,我目前正在开发一个像素完美设计的应用程序,我使用具有清晰背景的视图控制器.但是此功能保持不变,并且灯光覆盖显示在视图控制器上.因为背景是白色渐变,所以这个光覆盖(在屏幕截图2上)是非常明显的,并且当动画完成时,它被移除而没有动画,这使得它非常明显和烦人.

我知道我可以创建自定义动画和过渡,但我想知道:

有没有办法删除(或修改)这个光覆盖和阴影,而不必创建自定义过渡?

谢谢您的帮助.

iphone animation uinavigationcontroller ios

14
推荐指数
1
解决办法
1726
查看次数

IOS系统通过自定义音频会话发出声音

我有一个iOS应用程序,可以播放不同的音频效果并同时录制音频.该应用程序的目的目前并不重要,但我有iOS音频效果的问题.

要播放的效果,我用SimpleAudioEngineCocosDenshionAPI(使用AVAudioPlayer,据我可以看到).效果是预加载的,它们工作正常(我实际上在按钮上滚动,滚动和类似).使用以下代码播放效果:

willFinishLaunchingWithOptions方法中:

[[SimpleAudioEngine sharedEngine] preloadEffect:@"sound.wav"];
Run Code Online (Sandbox Code Playgroud)

在其他方法中,需要播放时:

[[SimpleAudioEngine sharedEngine] playEffect:@"sound.wav"];
Run Code Online (Sandbox Code Playgroud)

这里没有奇迹,但与此同时,我正在用内置麦克风录制噪音AVCaptureSession.捕获会话代码来自Web上的示例之一.

AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];

captureSession = [[AVCaptureSession alloc] init];

NSError *error = nil;
captureAudioDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:&error];

if ([captureSession canAddInput: captureAudioDeviceInput])
{
    [captureSession addInput:captureAudioDeviceInput];
}

captureAudioDataOutput = [AVCaptureAudioDataOutput new];

if ([captureSession canAddOutput:captureAudioDataOutput])
{
    [captureSession addOutput:captureAudioDataOutput];
}

// Create a serial dispatch queue and set it on the AVCaptureAudioDataOutput object
dispatch_queue_t audioDataOutputQueue = dispatch_queue_create("AudioDataOutputQueue", DISPATCH_QUEUE_SERIAL);

[captureAudioDataOutput setSampleBufferDelegate:self queue:audioDataOutputQueue]; …
Run Code Online (Sandbox Code Playgroud)

keyboard audio ios avaudiosession

10
推荐指数
1
解决办法
1129
查看次数

在Scrollview中滚动CALayer的蒙版

我正在尝试iOS SDK,我有以下UIView结构:

  • UIView
    • UIImageView - 只有背景图片
    • UIImageView(带CALayer面具)
    • UIScrollView
      • Label

结构非常简单,UIScrollView是透明层,第二层UIImageView有遮罩.我想要做的是CALayer掩码会根据滚动视图中内容的位置移动它的位置.如果用户滚动,则应更新蒙版的位置.我已经通过使用UIScrollView's委托解决了这个问题:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGPoint contentOffset = scrollView.contentOffset;
    contentOffset.y = -contentOffset.y;

    self.overlayImageView.viewlayer.mask.position = contentOffset;
}
Run Code Online (Sandbox Code Playgroud)

掩码viewDidLoad在视图控制器的生命周期中创建并且不会更改.

问题是掩模位置更新太慢.这样看起来掩码跟随滚动视图的内容,而不是滚动它.该scrollViewDidScroll委托方法正确调用.

为了更好地理解这个问题,我附上了我在iOS模拟器中制作的视频. http://www.youtube.com/watch?v=w3xRl3LTngY

所以问题是:

有没有办法让面具更新更快,或者这是iOS的限制?

core-animation core-graphics uiview uiimage ios

10
推荐指数
1
解决办法
2687
查看次数

iOS8自动布局以编程方式固定到相对布局边距

我有一个UI元素(UISwitch实际上,但实际上并不重要),它将前导和尾随空间固定到Interface Builder中的superview.Xcode 6中的约束如下所示:

约束引脚

领先空间的约束是有效的.约束的值是42.0分.

这正是我想要的,因为对于不同的设备,我可以更改layoutMargins属性UIView并且约束将正常工作,以增加视图之间的边距.

现在我想在代码中添加另一个视图,该视图也会将前导和尾随空间固定到它的超级视图边距,因此相同的layoutMargins设置到superview将起作用.

我使用可视格式语言使用以下语法固定视图:

NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-42.0-[separatorView]-42.0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(self.contentView, separatorView)];

[self.contentView addConstraints:constraints];
[self.contentView setNeedsUpdateConstraints];
Run Code Online (Sandbox Code Playgroud)

这是有效的,但layoutMargins属性使用此约束无效,因此它显然不是固定到边距,而是直接固定到superview.

所以我的问题是:

如何使用可视化格式语言将UI元素空间固定到代码中?或者,如果不可能,如何使用constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:API?

谢谢!

ios autolayout visual-format-language xcode6 ios8

10
推荐指数
1
解决办法
2万
查看次数

Xcode 5不打印异常细节

我有一个为iOS 7构建的项目,它到目前为止工作正常,但在Git合并后,一些设置或某些东西被破坏,异常不再输出到控制台.因此,控制台中永远不会显示"因未捕获的异常而终止应用程序"错误消息.我在设备和模拟器上都尝试过这个项目,同样的事情.我找不到这个原因以及如何修复它,我谦卑地请求你的帮助.

事实:

  • 调试器正在运行,
  • 调试器停止并突出显示正确的行,
  • 所有异常断点都是活动的,
  • NSLog命令正在运行,
  • lldb中的po命令正在运行.

在寻求帮助之前我曾尝试过什么?

  • 清理(​​包括构建文件夹)和重建项目,
  • 重启Xcode,
  • 重启OS X,
  • 重新连接设备,
  • 重启设备.

我还可以做些什么?谢谢您的帮助!

xcode objective-c ios xcode5

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

Crashlytics的初始化SDK不起作用

我正在尝试将Crashlytics应用到我当前的iOS应用程序中,但Crashlytics在初始化SDK后没有进一步发展.每个应用程序之前工作正常,但现在它没有.

你能告诉我,这有什么问题吗?每行代码都在我的应用程序中.我做了同样的步骤但没有发生任何事情.

谢谢.在此输入图像描述

ios crashlytics

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

iOS数据计数器 - 使用私有API

我正在开发一个不适用于App Store的应用程序,因此我可以使用私有API.

我想要完成的是获取每个特定应用程序的数据信息计数器 - 如果可能的话,单独用于WIFI和蜂窝网络使用.

我假设可能有一些API,因为Apple在设置>手机>"使用手机数据"和"设置">"常规">"使用"中进行了此操作.我一直在阅读标题,但这是一个非常漫长的过程.

有谁知道哪个私有API允许此功能?否则,这些数据会在物理上存储在设备上,以便我可以访问它?

iphone-privateapi ios

6
推荐指数
1
解决办法
1156
查看次数

Xcode 6在物理iOS设备上运行测试不起作用

我在物理设备上运行单元测试目标时遇到问题(在我的情况下,带有iOS 8.1的iPhone 6).为此,我创建了一个全新的iOS Xcode项目,打开它并使用Cmd + U(产品 - >测试)运行测试.该应用程序成功编译并询问我的代码签名凭据.该应用程序甚至在设备上打开了.一切都很好,直到这一部分.

但测试永远不会运行,Xcode会在"测试"中停留几分钟,然后最终退出:

*** Canceling tests due to timeout in Waiting for test process to check in...
Run Code Online (Sandbox Code Playgroud)

控制台抛出一些代码签名错误或类似错误:

2014-10-30 08:54:12.585 Test[4721:1298810] Error loading /private/var/mobile/Containers/Data/Application/B727E18E-48BC-4A7E-BDBA-19157ED5A4AC/tmp/TestTests.xctest/TestTests: 

dlopen(/private/var/mobile/Containers/Data/Application/B727E18E-48BC-4A7E-BDBA-19157ED5A4AC/tmp/TestTests.xctest/TestTests, 262): no suitable image found.
Did find: /private/var/mobile/Containers/Data/Application/B727E18E-48BC-4A7E-BDBA-19157ED5A4AC/tmp/TestTests.xctest/TestTests: 

code signature invalid for '/private/var/mobile/Containers/Data/Application/B727E18E-48BC-4A7E-BDBA-19157ED5A4AC/tmp/TestTests.xctest/TestTests'
DevToolsBundleInjection: Error loading bundle '/private/var/mobile/Containers/Data/Application/B727E18E-48BC-4A7E-BDBA-19157ED5A4AC/tmp/TestTests.xctest'
Run Code Online (Sandbox Code Playgroud)

我真的没有得到它,应用程序正确签名,但我猜测注入的测试库不是.

任何人都知道如何解决这个问题?或者这是否意味着我们仅限于在模拟器中进行测试?

我一直在测试它的项目可以在我的GitHub上找到:https://github.com/Legoless/StackOverflow/tree/master/Objective-C/TestTargetFailure

谢谢.

iphone xcode unit-testing ios ios8

6
推荐指数
1
解决办法
2439
查看次数