我的下面的代码与swift 4工作得很好但升级到swift 4.2后我收到了这个错误,我浪费了3个小时搜索问题但是失败了.如果有人可以指导我如何解决这个问题.
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if postType == 2 {
let image = info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey)] as! UIImage
mediaType.image = image
} else {
videoURL = info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey.mediaURL)] as? URL
do {
let asset = AVURLAsset(url: videoURL!, options: nil)
let imgGenerator = AVAssetImageGenerator(asset: asset)
imgGenerator.appliesPreferredTrackTransform = true
let cgImage = try imgGenerator.copyCGImage(at: CMTime.init(value: 0, timescale: 1), actualTime: nil)
let thumbnail = UIImage(cgImage: cgImage)
self.mediaType.image = thumbnail
} catch {
print("*** Error generating thumbnail: \(error)")
} …Run Code Online (Sandbox Code Playgroud) 我试图以这种方式从app delegate .m加载UIStoryboard:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:[NSBundle mainBundle]];
UIViewController *vc =[storybord instantiateInitialViewController];
[self.window addSubview:vc.view];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
这段代码有什么问题?任何的想法?
感谢AD Progress出色的研究和下面的回答,我终于弄清楚了IBSegueActions是怎么回事。
如果您将rootViewControllersegue(或任何其他类型,大概)连接到IBSegueActionin 中UINavigationContoller,但在那里找不到它,它将查看响应者链上的下一个视图控制器,直到找到IBSegueAction具有正确签名的 。如果它没有找到一个,它会叫init(with coder: NSCoder)的rootViewController。如果只是在某处记录了这一点……
笔记
注意:这是一个说明问题的最小示例 - 如何在UINavigationController使用IBSegueAction. 我知道这不是您通常呈现详细视图的方式。
注 2:我知道如何将 segues 与prepare(for segue: UIStoryboardSegue). 我想知道如何初始化一个视图控制器时,如何通过非可选参数包含在一个模式UINavigationController使用IBSegueAction
注 3:我知道如何将 anIBSegueAction用于未包含在 a 中的视图控制器UINavigationController(例如推送导航堆栈)
原始问题
我有以下设置…
中的人员列表UITableViewController。轻敲 aPersonCell呈现 aPersonViewController内 aUINavigationController
为了避免在 中有一个可选Person的PersonViewController,我试图使用IBSegueActions。
我首先想到的是,我需要一个用于之间的SEGUEPeopleViewController和 …
我的iPhone应用程序不是通用的,但它有一个功能,我想为在iPad上玩的人启用.有没有办法在兼容模式下检测到你在iPad上运行?用于检测机器规格的UIDevice方法都返回您在iPhone上获得的值(至少在模拟器上).我唯一能想到的就是检测OS 3.2,但这种技术不会长时间运行.
自从升级到Swift 4.2以来,我发现许多NSKeyedUnarchiver和NSKeyedArchiver方法已被弃用,我们现在必须使用type方法static func unarchivedObject<DecodedObjectType>(ofClass: DecodedObjectType.Type, from: Data) -> DecodedObjectType?来取消归档数据.
我成功地存档了我的定制类WidgetData的数组,这是一个NSObject子类:
private static func archiveWidgetDataArray(widgetDataArray : [WidgetData]) -> NSData {
guard let data = try? NSKeyedArchiver.archivedData(withRootObject: widgetDataArray as Array, requiringSecureCoding: false) as NSData
else { fatalError("Can't encode data") }
return data
}
Run Code Online (Sandbox Code Playgroud)
当我尝试取消归档此数据时出现问题:
static func loadWidgetDataArray() -> [WidgetData]? {
if isKeyPresentInUserDefaults(key: USER_DEFAULTS_KEY_WIDGET_DATA) {
if let unarchivedObject = UserDefaults.standard.object(forKey: USER_DEFAULTS_KEY_WIDGET_DATA) as? Data {
//THIS FUNCTION HAS NOW BEEN DEPRECATED:
//return NSKeyedUnarchiver.unarchiveObject(with: unarchivedObject as Data) as? [WidgetData]
guard let nsArray = …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何使用Combine 和SwiftUI 处理异步操作。
例如,我有一个HealthKitManager类,除其他外,处理请求健康商店授权......
final class HealthKitManager {
enum Error: Swift.Error {
case notAvailable
case authorisationError(Swift.Error)
}
let healthStore = HKHealthStore()
func getHealthKitData(for objects: Set<HKObjectType>, completion: @escaping (Result<Bool, Error>) -> Void) {
guard HKHealthStore.isHealthDataAvailable() else {
completion(.failure(.notAvailable))
return
}
self.healthStore.requestAuthorization(toShare: nil, read: objects) { completed, error in
DispatchQueue.main.async {
if let error = error {
completion(.failure(.authorisationError(error)))
}
completion(.success(completed))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
其用法如下...
struct ContentView: View {
let healthKitManager = HealthKitManager()
@State var showNextView = false
@State var …Run Code Online (Sandbox Code Playgroud) 我正在关注Scala 的Play 2.0 教程
一切正常,直到我尝试在Heroku上推送和运行它.运行"git push heroku master"后,服务器崩溃了.检查日志,我看到以下内容:
Starting process with command `target/start -Dhttp.port=37849 -Xmx384m -Xss512k -XX:+UseCompressedOops`
2012-08-13T06:52:45+00:00 app[web.1]: Play server process ID is 2
2012-08-13T06:52:46+00:00 app[web.1]: [info] play - database [default] connected at jdbc:h2:mem:play
2012-08-13T06:52:46+00:00 app[web.1]: [warn] play - Your production database [default] needs evolutions!
2012-08-13T06:52:46+00:00 app[web.1]:
2012-08-13T06:52:46+00:00 app[web.1]: CREATE SEQUENCE task_id_seq;
2012-08-13T06:52:46+00:00 app[web.1]: label varchar(255)
2012-08-13T06:52:46+00:00 app[web.1]: CREATE TABLE task (
2012-08-13T06:52:46+00:00 app[web.1]: id integer NOT NULL DEFAULT nextval('task_id_seq'),
2012-08-13T06:52:46+00:00 app[web.1]: );
2012-08-13T06:52:46+00:00 app[web.1]:
2012-08-13T06:52:46+00:00 app[web.1]: # --- …Run Code Online (Sandbox Code Playgroud) 我正在Apache Spark上构建一个RESTful API.提供以下Python脚本spark-submit似乎工作正常:
import cherrypy
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('myApp').getOrCreate()
sc = spark.sparkContext
class doStuff(object):
@cherrypy.expose
def compute(self, user_input):
# do something spark-y with the user input
return user_output
cherrypy.quickstart(doStuff())
Run Code Online (Sandbox Code Playgroud)
但谷歌搜索我看到像Livy和spark-jobserver这样的东西.我阅读了这些项目的文档和一些教程,但我仍然不完全理解Livy或spark-jobserver优于使用CherryPy或Flask或任何其他Web框架的简单脚本的优点.它是关于可扩展性的吗?上下文管理?我在这里错过了什么?如果我想要的是一个用户不多的简单RESTful API,那么Livy或spark-jobserver值得吗?如果是这样,为什么?
我声明如下:
var x:Int?
var y:Int?
Run Code Online (Sandbox Code Playgroud)
我想要一个z包含和的x和的第三个变量y.据推测,作为x&y是自选,z也必须是一个可选的:
var z:Int? = x + y
Run Code Online (Sandbox Code Playgroud)
但这给出了一个编译错误"可选类型'Int?'的值 没打开;你的意思是用'!' 要么 '?'"
如果我打开x&y:
var z:Int? = x! + y!
Run Code Online (Sandbox Code Playgroud)
我得到一个运行时错误,因为x&n y为零,所以无法解开.
我可以达到如下所需的结果:
var z:Int?
if let x1 = x {
if let y1 = y {
z = x1+y1
}
}
Run Code Online (Sandbox Code Playgroud)
但是将2个整数加在一起似乎有点冗长!有没有更好的方法来实现这一目标?
我的ViewController.swift
func startTimer() {
timer = NSTimer().scheduleTimerWithTimerInvterval(1.0,target: self,selctor: Selector("couting"),userinfo: nil, repeats: true)
}
func pauseTimer() {
timer.invalidate()
println("pausing timer")
}
Run Code Online (Sandbox Code Playgroud)
这是appDelegate.swift
func applicateWillResignActive(application: UIApplication) {
viewController().pauseTimer()
println("closing app")
}
Run Code Online (Sandbox Code Playgroud)
它是打印暂停计时器和关闭应用程序,但当我再次打开时,我看到它从未暂停.我该怎么做?
ios ×5
swift ×5
ios12 ×2
objective-c ×2
uistoryboard ×2
apache-spark ×1
appdelegate ×1
asynchronous ×1
cocoa-touch ×1
combine ×1
ipad ×1
iphone ×1
livy ×1
nstimer ×1
optional ×1
scala ×1
swiftui ×1