小编Dan*_*iel的帖子

无法缩进UITableViewCell子类

我已经将UITableViewCell子类化为创建一个带有按钮和2个标签的自定义单元格.使用Dave Mark的Beginning iPhone Development中概述的模式从xib加载单元定义.这是基本代码:

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MarketItemCustomCell" owner:self options:nil];

    for (id oneObject in nib)
    {
        if ([oneObject isKindOfClass:[MarketItemCustomCell class]])
        {
            cell = (MarketItemCustomCell *)oneObject;
            break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

标签和按钮按预期显示,但不遵守缩进级别.我已经实现了如下所示的indentationLevelForRowAtIndexPath,但是单元格仍然一直向左对齐.

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        <snip/>
        return 5;
    }
Run Code Online (Sandbox Code Playgroud)

请注意,当我不使用自定义单元格时,缩进级别正常工作.

任何提示?

iphone indentation uitableview

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

Swift语言:如何调用SecRandomCopyBytes

从Objective-C,我可以这样做:

NSMutableData *data = [NSMutableData dataWithLength:length];
int result = SecRandomCopyBytes(kSecRandomDefault, length, data.mutableBytes);
Run Code Online (Sandbox Code Playgroud)

在Swift中尝试这个时,我有以下内容:

let data = NSMutableData(length: Int(length))
let result = SecRandomCopyBytes(kSecRandomDefault, length, data.mutableBytes)
Run Code Online (Sandbox Code Playgroud)

但我得到这个编译器错误:

'Void' is not identical to 'UInt8'
Run Code Online (Sandbox Code Playgroud)

data.mutableBytes参数被拒绝,因为类型不匹配,但我无法弄清楚如何强制参数(我假设它在某种程度上是安全的).

xcode ios swift xcode6

7
推荐指数
2
解决办法
2580
查看次数

如何在Xcode 7 beta 4中调用SecItemCopyMatching?

在使用Swift的Xcode 6和7的早期版本中,这种语法可以工作:

    var secureItemValue: Unmanaged<AnyObject>?

    let statusCode: OSStatus = SecItemCopyMatching(keychainItemQuery, &secureItemValue)
    if statusCode == errSecSuccess
    {
        let opaquePointer = secureItemValue?.toOpaque()

        let secureItemValueData = Unmanaged<NSData>.fromOpaque(opaquePointer!).takeUnretainedValue()

        // Use secureItemValueData...
    }
Run Code Online (Sandbox Code Playgroud)

但是,在Xcode 7 beta 4中,SecItemCopyMatching声明已更改:

旧: func SecItemCopyMatching(_ query: CFDictionary, _ result: UnsafeMutablePointer<AnyObject?>) -> OSStatus

新: func SecItemCopyMatching(_ query: CFDictionary!, _ result: UnsafeMutablePointer<Unmanaged<AnyObject>?>) -> OSStatus

...现在secureItemValue类型不匹配.

在提取结果之前,这个机制很混乱,我希望新声明在某种程度上更容易,但我不知道如何为secureItemValue变量声明正确的类型并提取结果.

ios swift xcode7 xcode7-beta4

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

使用modalPresentationStyle = FormSheet在UINavigationController中推送时,SFSafariViewController显示不正确

我有一个简单的设置表视图,它是UINavigationController的第一个视图.

我使用.FormSheet modalPresentationStyle呈现Settings UINavigationController,这意味着在iPhone上它占据全屏,而在iPad上,它以模态方式显示.

现在我想要设置表中的一行将SFSafariViewController推送到导航堆栈.

这在iPhone上运行良好,但在iPad上却没有.iPad截图:

在此输入图像描述

请注意,SFSafariViewController导航栏的一部分显示在导航栏下方(使用"设置"后退按钮).在图像中看到红色矩形.

let urlText = "http://www.apple.com"       
let url = NSURL(string: urlText)!     
let safariViewController = SFSafariViewController(URL: url)
self.navigationController?.pushViewController(safariViewController, animated: true)
Run Code Online (Sandbox Code Playgroud)

在iPhone上,你根本看不到SFSafariViewController导航栏 - 这对我的用例来说是完美的.

任何神奇的设置,使这项工作正常?

uinavigationcontroller ios swift

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

如果"辅助功能标识符"用于UI自动化测试,为什么它包含在可本地化的资源中?

似乎Accessibility Identifier已添加该属性以允许UI自动化测试具有更稳定的ID.建议使用而不是Accessibility Label屏幕阅读器和VoiceOver使用的标签.

然而,这是有道理的:

  1. 在Xcode中Accessibility Identifier使用Export for localization功能时,为什么包含为可翻译的字符串资源?这使得多语言测试更加困难,因为它鼓励每种语言使用不同的ID.
  2. 为什么Accessibility Identifier与可访问性相关联?为什么不称它为UI自动化ID?Accessibility Identifier实际上是否实际呈现给屏幕阅读器,VoiceOver,其他?

xcode accessibility localization ui-automation ios

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

初始化UICollectionViewCell时,viewWithTag返回nil

刚开始UICollectionView.我用IB创建了一个简单UICollectionViewUIViewController.它通过分页水平滚动.我在UICollectionViewCell里面放了一个简单的UICollectionView.我为单元格设置了重用标识符.

我在UILabel里面放了一个100的标签UICollectionViewCell.

viewDidLoad,我打电话:

[_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Thing"];
Run Code Online (Sandbox Code Playgroud)

后来我试图像这样初始化单元格:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Thing" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor greenColor];

    UILabel *nameLabel = (UILabel *)[cell viewWithTag:100];
    nameLabel.text = @"Bogus";

    return cell;
}
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,视图正确加载; 我可以水平滚动通过2个单元格.我看到丑陋的绿色标识每个细胞.

但是,该viewWithTag方法返回nil,因此未设置nameLabel文本.

为什么?

请注意,我还尝试UICollectionViewCell使用它定义自定义子类并调用registerClass.在IB中,我将单元类更改为自定义子类,并将其绑定UILabelUILabel子类中的插座.

但这也行不通.(我宁愿避免使用自定义子类方法,因为似乎没有必要定义只是为了保持类IBOutlets.)

我在想我错过了一些明显的东西.

这里描述的类似问题:

无法从UICollectionViewCell实例访问Image

objective-c ios uicollectionview uicollectionviewcell

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

在JSON中反序列化嵌套列表的最佳方法-C#

我得到了这个杰森:

{
    "CountriesAndCities": [
        {
            "CountryId": 2,
            "CountryName": "Chile",
            "CountryISOA3": "CHL",
            "Cities": [
                {
                    "CityId": 26,
                    "CityName": "Gran Santiago",
                    "Country": null
                },
                {
                    "CityId": 27,
                    "CityName": "Gran Concepción",
                    "Country": null
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

如您所见,它是一个对象列表,这些对象嵌套了另一个列表。

我有以下模型:

public class City
    {
        public int CityId { get; set; }
        public string CityName { get; set; }
        public Country Country { get; set; }
    }

    public class Country
    {
        public int CountryId { get; set; }
        public string CountryName { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# json json.net

6
推荐指数
2
解决办法
2041
查看次数

如何取消具有从“async”操作启动返回的可取消类型的“async”函数

我需要支持取消一个函数,该函数返回一个可以在启动后取消的对象。就我而言,该类requester位于我无法修改的第三方库中。

actor MyActor {

    ...

    func doSomething() async throws -> ResultData {

        var requestHandle: Handle?
    
        return try await withTaskCancellationHandler {
            requestHandle?.cancel() // COMPILE ERROR: "Reference to captured var 'requestHandle' in concurrently-executing code"
        } operation: {

            return try await withCheckedThrowingContinuation{ continuation in
            
                requestHandle = requester.start() { result, error in
            
                    if let error = error
                        continuation.resume(throwing: error)
                    } else {
                        let myResultData = ResultData(result)
                        continuation.resume(returning: myResultData)
                    }
                }
            }
        }
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

我已经审查了其他问题和此线程:https://forums.swift.org/t/how-to-use-withtaskcancellationhandler-properly/54341/4

有些案例非常相似,但又不完全相同。由于以下错误,此代码将无法编译:

“在并发执行的代码中引用捕获的 var 'requestHandle'”

我假设编译器试图在 …

cancellation async-await swift

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

在 iOS 上自动启动 Google Authenticator 应用

是否有支持在 iOS 上启动 Google 身份验证器的方式?

我想让客户更轻松地打开应用程序并复制基于时间的代码,然后再将其粘贴回我的应用程序。

我凭经验发现这个(Swift)代码将启动应用程序:

UIApplication.sharedApplication().openURL(NSURL(string: "otpauth://")!)
Run Code Online (Sandbox Code Playgroud)

...但我想知道是否有更好的支持方式。

具体来说,是否支持没有参数的 otpauth:// 协议来简单地启动应用程序?

ios google-authenticator

5
推荐指数
1
解决办法
3684
查看次数

哪些 RFC 3161 公共时间服务器 URL 可以与signtool.exe 一起使用?

我在 Windows 上使用signtool.exe 使用 SHA256 签名进行代码签名。

我看到的唯一示例(来自赛门铁克)显示使用:

http://timestamp.geotrust.com/tsa
Run Code Online (Sandbox Code Playgroud)

..作为时间服务器。

例如:signtool.exe sign /a /s MY /n "Common name" /as /fd sha256 /tr http://timestamp.geotrust.com/tsa /v "<file to be signed>"

但我想知道是否还有其他公开支持的 RFC 3161 时间戳服务器也可以工作。

我这么问是因为我们之前在使用 SHA1 时通过使用几个不同的服务器(以及多次重试尝试 + 延迟)在代码签名过程中构建了冗余。这有助于解决非常偶然但令人烦恼的构建失败。

我想在使用 SHA256 进行代码签名时执行相同的操作。

windows code-signing rfc3161

5
推荐指数
1
解决办法
2242
查看次数

MKAnnotationView未在iOS 11中显示

我正在app store上运行一个应用程序,它具有带其他功能的地图视图.

一切都运行良好,直到iOS 10(iOS 11以外的所有版本),现在当我在iOS 11上测试相同的应用程序时,MKAnnotationView没有显示(这只发生在iOS 11).

没有显示任何异常/错误.我考虑过Apple的文档,但API中没有任何这样的弃用,但它仍然没有用.

有人可以在这个问题上帮助我.

annotations mapkit mkannotationview ios11

5
推荐指数
1
解决办法
2358
查看次数

在XML中,属性顺序是否重要?

我正在编写一个生成几个XML文件的应用程序.在文件中,一些标签具有属性.我想知道属性的顺序是否重要,或者它是否相同.

例如,这个输出:

<person first='john' last='doe'>
Run Code Online (Sandbox Code Playgroud)

与此相同:

<person last="doe" first="john">
Run Code Online (Sandbox Code Playgroud)

xml attributes

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

在后台线程中运行异步函数时遇到问题(并发)

我在使异步函数在后台线程中运行时遇到问题(以防止阻塞主线程)。

下面是一个运行时间大约为 5 秒的方法。根据我所了解到的情况,似乎创建该函数async并用await函数调用标记它就足够了。但它并没有按预期工作,并且用户界面仍然冻结。

编辑 既然据说 Swift 5.5 并发可以取代 DispatchQueue,我试图找到一种方法来仅使用 Async/Await 来做到这一点。

EDIT_2 我确实尝试删除 @MainActor 包装器,但它似乎仍然在主线程上运行。

NumberManager.swift

@MainActor class NumberManager: ObservableObject {
@Published var numbers: [Double]?    

func generateNumbers() async  {

        var numbers = [Double]()
        numbers = (1...10_000_000).map { _ in Double.random(in: -10...10) }
        self.numbers = numbers
    // takes about 5 seconds to run...
} }
Run Code Online (Sandbox Code Playgroud)

内容视图

struct ContentView: View {
@StateObject private var numberManager = NumberManager()

var body: some View{
    TabView{
        VStack{
            DetailView(text: isNumbersValid ? "First …
Run Code Online (Sandbox Code Playgroud)

concurrency ios async-await swift swiftui

3
推荐指数
1
解决办法
1023
查看次数