我刚刚安装了最新的Xcode测试版来试用Swift 2以及Apple Watch开发部分的改进.
我实际上很难搞清楚为什么这种NSUserDefaults
在iOS和Watch OS2之间共享信息的基本方法无法正常工作.
我按照这个循序渐进的教程来检查我是否错过了这个过程中的某些内容,比如打开手机应用程序和扩展程序的同一组,但这就是我得到的:没有.
这是我在iPhone应用程序中为ViewController编写的内容:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var lb_testo: UITextField!
let shared_defaults:NSUserDefaults = NSUserDefaults(suiteName: "group.saracanducci.test")!
var name_data:NSString? = ""
override func viewDidLoad() {
super.viewDidLoad()
name_data = shared_defaults.stringForKey("shared")
lb_testo.text = name_data as? String
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func upgrade_name(sender: AnyObject) {
name_data = lb_testo.text
shared_defaults.setObject(name_data, forKey: "shared")
lb_testo.resignFirstResponder()
shared_defaults.synchronize()
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我在WatchKit的InterfaceController中所拥有的:
import WatchKit
import …
Run Code Online (Sandbox Code Playgroud) 我目前正在构建一个手表应用扩展程序,并希望使用模拟器,因为它比每次构建到我的实际Apple Watch更容易,更快捷.
但是,我遇到了模拟器的问题,由于错误"此连接不是私有",我无法访问任何网站.这通常不会成为问题,除非在我的情况下我需要使用Facebook登录我的iOS,我在那里面临同样的问题.使用时,消息略有不同SFSafariViewController
:
Safari cannot open the page because it could not establish a secure connection to the server
Run Code Online (Sandbox Code Playgroud)
我已经在模拟器上查看了Safari设置,看看是否有任何我可以禁用的安全性,但是无法找到任何内容.有什么办法可以解决这个问题吗?
我目前正在使用Xcode 9.1和macOS High Sierra 10.13.1
在Swift中,当使用时[weak self] in
,当嵌套在另一个闭包中时,我应该加倍使用。
例:
override func viewDidLoad() {
super.viewDidLoad()
makeAPICall() { [weak self] in
self?.finishedAPICall = true
DispatchQueue.main.async { [weak self] in
// random code with self
self?.view.layoutIfNeeded()
}
}
}
func makeAPICall(completion: () -> Void) {}
Run Code Online (Sandbox Code Playgroud)
最外层[weak self]
使得以下所有自我都是可选的。这是否意味着它也一直在将其保存在嵌套闭包内部的内存中?如果我在两个方面都使用自我,是否在两个方面都需要自我?
这是我遇到的一个概念性问题(不是试图解决特定问题,而是更好地理解问题).
IBOutlets
在视图控制器默认情况下是"强制解包"变量,我不知道原因,但它告诉我iOS要求在调用VC时初始化它们中的每一个.
我有一个视图控制器A
和另外两个B
和C
.我有一个点击监听,在给我一个自定义按钮A
,取决于某个变量,如果点击后决定B
或C
将要被调用.
我尝试实现这个,presentViewController
但由于某种原因我的程序在运行时崩溃,因为在任何一个B
或中的非初始化插座C
.
然而,我用segues命名并尝试了相同的东西,performSegueWithIdentifier
它只是起作用.
我想知道,他们之间的区别是什么,我告诉我知道的一切是正确的吗?
提前致谢
我有一个简单的类,我想在 中使用 keypath init
,如下所示:
class V: UIView {
convenience init() {
self.init(frame: .zero)
self[keyPath: \.alpha] = 0.5
}
}
let v = View()
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,出现运行时错误:
致命错误:无法从 '????XD' 中解开 keypath 类型:
但是,如果我在 keyPath 中指定类型它工作正常:
class V: UIView {
convenience init() {
self.init(frame: .zero)
self[keyPath: \UIView.alpha] = 0.5
}
}
let v = View()
print(v.alpha) \\ prints 0.5
Run Code Online (Sandbox Code Playgroud)
但是,更奇怪的是这段代码有效:
class V: UIView {
convenience init() {
self.init(frame: .zero)
foo()
}
func foo() {
self[keyPath: \.alpha] = 0.5
}
}
let v = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试删除阿拉伯文本变音符号。例如我需要将其转换\xd9\x8e\xd8\xa8
为此\xd8\xa8
,这是我的代码:
if (text != "") {\n for char in text! {\n print(char)\n print(char.unicodeScalars.first?.value)\n if allowed.contains("\\(char)"){\n newText.append(char)\n }\n }\n self.textView.text = text!\n} else {\n// TODO :\n// show an alert\n print("uhhh no way")\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n我已经尝试过这些解决方案,但没有运气:
\n\n\n\n\nfunc extractAudioFromVideo(videoUrl:NSURL, audioPath:String){
//2
var asset = AVURLAsset(URL: videoUrl, options: nil)
asset.loadValuesAsynchronouslyForKeys(NSArray(object: "tracks") as [AnyObject], completionHandler: { () -> Void in
var audioTrack = asset.tracksWithMediaType(AVMediaTypeAudio)[0] as! AVAssetTrack
var audioComposition = AVMutableComposition()
var audioCompositionTrack:AVMutableCompositionTrack!
audioCompositionTrack = audioComposition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: CMPersistentTrackID())
audioCompositionTrack.insertTimeRange(audioTrack.timeRange, ofTrack: audioTrack, atTime: CMTimeMake(0, 1), error: nil)
var exportSession = AVAssetExportSession(asset: audioComposition, presetName: AVAssetExportPresetAppleM4A)
var toFileUrl = NSURL(fileURLWithPath: audioPath)
exportSession.outputURL = toFileUrl
exportSession.outputFileType = "com.apple.m4a-audio"
exportSession.exportAsynchronouslyWithCompletionHandler({ () -> Void in
if exportSession.status == AVAssetExportSessionStatus.Completed {
println("Succes")
}else{
println("not working")
}
}) …
Run Code Online (Sandbox Code Playgroud) 我希望有人能在这里帮助我。我正在尝试进行基本的录音设置,但 AudioKit 正在崩溃,我确定这是我的错,我没有做正确的事情。这是我的设置。在我中,viewDidLoad
我像这样配置 AudioKit:
// Session settings
do {
AKSettings.bufferLength = .short
try AKSettings.setSession(category: .playAndRecord, with: .allowBluetoothA2DP)
} catch {
AKLog("Could not set session category.")
}
AKSettings.defaultToSpeaker = true
// Setup the microphone
micMixer = AKMixer(mic)
micBooster = AKBooster(micMixer)
// Load the test player
let path = Bundle.main.path(forResource: "audio1", ofType: ".wav")
let url = URL(fileURLWithPath: path!)
testPlayer = AKPlayer(url: url)
testPlayer?.isLooping = true
// Setup the test mixer
testMixer = AKMixer(testPlayer)
// Pass the output from the player …
Run Code Online (Sandbox Code Playgroud) 我有 Xcode 版本 8.3.2 (8E2002)。我想更新配置文件。假设我想添加新设备。我曾经使用 fastlane 手动创建存档。如何检查所有新设备是否成功启动新存档?