我已经将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)
请注意,当我不使用自定义单元格时,缩进级别正常工作.
任何提示?
从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参数被拒绝,因为类型不匹配,但我无法弄清楚如何强制参数(我假设它在某种程度上是安全的).
在使用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变量声明正确的类型并提取结果.
我有一个简单的设置表视图,它是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导航栏 - 这对我的用例来说是完美的.
任何神奇的设置,使这项工作正常?
似乎Accessibility Identifier
已添加该属性以允许UI自动化测试具有更稳定的ID.建议使用而不是Accessibility Label
屏幕阅读器和VoiceOver使用的标签.
然而,这是有道理的:
Accessibility Identifier
使用Export for localization功能时,为什么包含为可翻译的字符串资源?这使得多语言测试更加困难,因为它鼓励每种语言使用不同的ID.Accessibility Identifier
与可访问性相关联?为什么不称它为UI自动化ID?Accessibility Identifier
实际上是否实际呈现给屏幕阅读器,VoiceOver,其他?刚开始UICollectionView
.我用IB创建了一个简单UICollectionView
的UIViewController
.它通过分页水平滚动.我在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中,我将单元类更改为自定义子类,并将其绑定UILabel
到UILabel
子类中的插座.
但这也行不通.(我宁愿避免使用自定义子类方法,因为似乎没有必要定义只是为了保持类IBOutlets
.)
我在想我错过了一些明显的东西.
这里描述的类似问题:
我得到了这个杰森:
{
"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) 我需要支持取消一个函数,该函数返回一个可以在启动后取消的对象。就我而言,该类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'”
我假设编译器试图在 …
是否有支持在 iOS 上启动 Google 身份验证器的方式?
我想让客户更轻松地打开应用程序并复制基于时间的代码,然后再将其粘贴回我的应用程序。
我凭经验发现这个(Swift)代码将启动应用程序:
UIApplication.sharedApplication().openURL(NSURL(string: "otpauth://")!)
Run Code Online (Sandbox Code Playgroud)
...但我想知道是否有更好的支持方式。
具体来说,是否支持没有参数的 otpauth:// 协议来简单地启动应用程序?
我在 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 进行代码签名时执行相同的操作。
我正在app store上运行一个应用程序,它具有带其他功能的地图视图.
一切都运行良好,直到iOS 10(iOS 11以外的所有版本),现在当我在iOS 11上测试相同的应用程序时,MKAnnotationView没有显示(这只发生在iOS 11).
没有显示任何异常/错误.我考虑过Apple的文档,但API中没有任何这样的弃用,但它仍然没有用.
有人可以在这个问题上帮助我.
我正在编写一个生成几个XML文件的应用程序.在文件中,一些标签具有属性.我想知道属性的顺序是否重要,或者它是否相同.
例如,这个输出:
<person first='john' last='doe'>
Run Code Online (Sandbox Code Playgroud)
与此相同:
<person last="doe" first="john">
Run Code Online (Sandbox Code Playgroud) 我在使异步函数在后台线程中运行时遇到问题(以防止阻塞主线程)。
下面是一个运行时间大约为 5 秒的方法。根据我所了解到的情况,似乎创建该函数async
并用await
函数调用标记它就足够了。但它并没有按预期工作,并且用户界面仍然冻结。
编辑 既然据说 Swift 5.5 并发可以取代 DispatchQueue,我试图找到一种方法来仅使用 Async/Await 来做到这一点。
EDIT_2 我确实尝试删除 @MainActor 包装器,但它似乎仍然在主线程上运行。
@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) ios ×7
swift ×5
async-await ×2
xcode ×2
annotations ×1
attributes ×1
c# ×1
cancellation ×1
code-signing ×1
concurrency ×1
indentation ×1
ios11 ×1
iphone ×1
json ×1
json.net ×1
localization ×1
mapkit ×1
objective-c ×1
rfc3161 ×1
swiftui ×1
uitableview ×1
windows ×1
xcode6 ×1
xcode7 ×1
xcode7-beta4 ×1
xml ×1