小编Rei*_*ner的帖子

iOS7:日志:此设备无法启用MKMapView音高

自从我更新到iOS7后,我开始使用正在开发的应用程序日志消息"无法在此设备上启用MKMapView音高".该设备是iPhone4.
有人可以告诉我这条消息的含义以及我如何摆脱它?

mkmapview ios7

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

float INFINITY可以由NSCoder归档,但不能归档

我必须归档一个float有价值的东西INFINITY,然后去归档它.
这是我的示例代码:

要归档的对象:

@interface CodeInf : NSObject <NSCoding>
@end
@implementation CodeInf
- (void)encodeWithCoder:(NSCoder *)encoder {
    float inf = INFINITY;
    [encoder encodeFloat: inf forKey:@"INFINITY"];
}
- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super init]) {
        float decodedInf = [decoder decodeFloatForKey: @"INFINITY"];
    }
    return self;
}
@end
Run Code Online (Sandbox Code Playgroud)

以下是归档/解密代码:

CodeInf *myCodeInf = [[CodeInf alloc] init];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myCodeInf];
myCodeInf = [NSKeyedUnarchiver unarchiveObjectWithData:data];
Run Code Online (Sandbox Code Playgroud)

归档工作,但是归档会引发错误:

*由于未捕获的异常'NSRangeException'终止应用程序,原因:'* - [NSKeyedUnarchiver decodeFloatForKey:]:键(INFINITY)的值(inf)太大而不适合32位浮点数'

这是dearchiver中的一个错误,还是我做错了什么?

objective-c archiving ios

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

UIImagePickerController显示的VIDEO_TOO_LONG_TITLE警报

我用a UIImagePickerController拍电影.通过设置videoMaximumDuration控制器的属性来限制电影的长度.
当试图播放更长的电影时,会按预期显示警报.

但是,控件上方会显示名为VIDEO_TOO_LONG_TITLE 的意外附加警报(请参见下图). 显然这是一个iOS错误(仅部分本地化,没有选择剪辑).

是否可以隐藏这种不必要和不适当的警报?

在此输入图像描述

alert uiimagepickercontroller ios

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

来自 CoreMotion.framework 的奇怪 #NullIsland 警告

最近,我在 Xcode 中记录了很多来自 CoreMotion 框架的奇怪警告,这些警告与功能相关getLocationForBundleID

[Client] {"msg":"#NullIsland Either the latitude or longitude was exactly 0! That's highly unlikely", "latIsZero":0, "lonIsZero":0}  
[Client] {"msg":"#NullIsland Received a latitude or longitude from getLocationForBundleID that was exactly zero", "latIsZero":0, "lonIsZero":0, "location":'28 5B E0 D7 EB 7F 00 00'}  
Run Code Online (Sandbox Code Playgroud)

我没有看到我的应用程序有任何故障。所以也许这些日志可以被忽略,但无论如何它们都很烦人。

我的问题是:

如何纠正潜在错误?
我怎样才能停止这些警告?

core-location ios core-motion

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

WCSessionDelegate:sessionDidBecomeInactive和sessionDidDeactivate已被标记为不可用,但是是必需的

我刚刚使用Xcode 8的转换功能将Swift 2应用程序转换为Swift 3.

我的代码有一个标记为的类WCSessionDelegate.

在Swift 2中,它编译时没有方法sessionDidBecomeInactivesessionDidDeactivate.

如果我编译Swift 3版本,编译器会抱怨我的类不符合协议WCSessionDelegate,这显然是正确的.
然后它提供插入两个函数的存根:

public func sessionDidBecomeInactive(_ session: WCSession) { }  
public func sessionDidDeactivate(_ session: WCSession) { }
Run Code Online (Sandbox Code Playgroud)

插入这些存根后,会报告以下错误:

Cannot override 'sessionDidBecomeInactive' which has been marked unavailable  
Cannot override 'sessionDidDeactivate' which has been marked unavailable  
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

watchkit wcsession swift3 xcode8

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

Xcode 15 beta 不允许运行脚本访问 .git/HEAD 和 Info.plist

为了访问当前的 git 分支并提交,我已经成功使用这个脚本很长时间了。
但是,在 Xcode 15.0 beta 中,脚本无法再访问 git 和 Info.plist 文件。我收到这些错误:

error: Sandbox: git(64989) deny(1) file-read-data <MyFolder>/.git/HEAD  
error: Sandbox: PlistBuddy(64994) deny(1) file-read-data <MyFolder>/Info.plist  
Run Code Online (Sandbox Code Playgroud)

是否可以再次允许访问这些文件?

xcode ios run-script

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

Apple手表:如何仅滚动表格内容,而不是整个手表用户界面?

为了学习手表编程,我设置了一个只包含图像和表格的小测试应用程序:

在此输入图像描述

该应用程序由iOS和手表模拟器执行.应用程序正确设置了图像和表格内容.

当桌子太长而无法完全放在手表屏幕上时,我希望点击桌子可以让它滚动桌面内容.但是,滚动完整的手表内容,包括图像(请注意绿色磁盘已滚动一半不在视线范围内):
在此输入图像描述

我该怎么做才能将图像固定在屏幕上,同时允许表格内容垂直滚动?

storyboard apple-watch watchkit wkinterfacetable watchos

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

XCUIElement 存在,但不可命中

在我的 UI 测试中,我UIView使用(缩短)以编程方式 创建了一个

let topMarker = UIView.init(frame: CGRect.init())
…
topMarker.accessibilityIdentifier = kTopMarker  
Run Code Online (Sandbox Code Playgroud)

topMarker视图位于自定义表格视图单元格中。在我的 UI 测试中,我使用

let new1stCell = app.cells.element(boundBy: 0)
let topMarker = new1stCell.otherElements[kTopMarker]
let topMarkerExists = topMarker.waitForExistence(timeout: 15)
XCTAssertTrue(topMarkerExists, "Top marker does not exist")
XCTAssertTrue(topMarker.isHittable, "Top marker is not hittable")
Run Code Online (Sandbox Code Playgroud)

当我设置测试失败断点时,测试在最后一行停止,即topMarker存在,但不可命中。
另一方面,我可以在快照中看到视图,即它存在并且可见。
这很奇怪,因为文档说:

如果元素存在并且可以在其当前位置单击、点击或按下,则 isHittable 返回 true。如果该元素不存在、不在屏幕上或被另一个元素覆盖,则返回 false。

我想,也许它是可见的,但不能被点击、点击或按下,因为userInteractionEnable不是true,但即使我将此属性设置为true,视图也不会变得可点击。

我错过了什么?

xcode xcode-ui-testing

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

Coredata VFS 标志 - 奇怪的日志

自从我最新更新 Xcode 以来,我在基于 Coredata 的应用程序中反复收到以下日志:

[logging] flag(s) 0x00000020 are reserved for VFS use and do not affect behaviour when passed to sqlite3_open_v2  
Run Code Online (Sandbox Code Playgroud)

这只是对数噪音还是与我有任何关系?

更新:
这发生在 iOS 15.4 的 iPhone 上的 Xcode 13.2.1 下。在 iOS 15.2 的模拟器上不会发生这种情况。

xcode core-data vfs ios

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

如何强制执行立即 Coredata 和 CloudKit 同步?

设置:
我的应用程序使用私有数据(即通过 iCloud 登录识别的用户数据)或共享数据(即通过 iCloud 共享的另一个用户的数据)。
因此它使用 2 个持久存储,私有的和共享的。两者都通过 Coredata 和 CloudKit 同步进行镜像。
当用户从私有数据切换到共享数据并返回时,获取请求和保存请求将被定向到私有或共享持久存储。

用例:
假设用户正在使用私人商店。在这种情况下,共享 iCloud 数据库以及镜像共享持久存储不包含任何数据,因为共享未激活。
然后,他/她会收到另一个用户共享他/她的数据的邀请。当当前用户接受邀请时,其他用户的共享数据将映射到当前用户的共享iCloud数据库,并最终镜像到共享持久存储。

问题:
不幸的是,共享数据的镜像不会立即开始。有时,它会在几秒钟后启动,有时仅在应用程序重新启动后启动。

问题:
如何强制执行即时 Coredata 和 CloudKit 镜像?
显然 aNSPersistentCloudKitContainer没有手动触发重新同步的功能。我在这篇文章中发现的一个建议是重新初始化NSPersistentCloudKitContainer,这会触发重新同步。
这是正确的方法吗?

synchronization core-data mirroring cloudkit

6
推荐指数
0
解决办法
654
查看次数