天道酬勤,学无止境

swift2

Update NSTouchBar on the fly to add/remove items programmatically

问题 我目前正在为我的 macOS 应用程序实现 NSTouchBar api。 此时,我唯一拥有的触摸栏将主视图控制器作为其委托,我可以向其添加项目。 问题是,我需要其中一些项目仅在满足特定条件时出现(在表格中选择了一行)。 考虑我有一个布尔值,指示按钮是否应该可见。 如果我的布尔值发生变化,如何即时更新 NSTouchBar 以显示/隐藏此按钮? (我不需要观察这个布尔值,我可以简单地用我已经实现的另一种方法调用更新) 我现在所做的如下:在touchBar(:makeItemForIdentifier)中,我有一个用于所有标识符的开关,在适当的case ,我要么返回带有按钮的NSCustomTouchBarItem ,要么返回nil ,如果我的布尔值为false 。 在选择表格的一行后,我尝试再次调用makeTouchBar ,但它不会更新按钮的可见性,就好像touchBar(:makeItemForIdentifier)没有再次调用一样。 谢谢! 回答1 四个想法: 尝试将触摸栏的defaultItemIdentifiers更改为应显示的项目标识符集。 请注意,如果用户自定义了触摸栏,这将是有问题的,但我认为按需交换项目和自定义触摸栏并不能很好地结合在一起。 这还有一个优点,即您不需要在touchBar(:makeItemForIdentifier:)中返回 nil。

2022-05-15 13:54:15    分类:技术分享    swift   macos   swift2   nstouchbar

SWrevealviewcontroller : Switch slideout menu direction from left to right pragmatically

问题 回答1 实际上你必须得到应用程序的语言,假设你有 Helper 类并放置静态方法来获取应用程序的语言。 助手.m +(void)getApplicationLanguage{ //return application language } 视图控制器.m -(IBAction)menuButtonClicked:(id)sender{ if ([[Helper getApplicationLanguage] isEqualToString:@"Arabic"]){ //slide from right }else{ //slide from left } } 我在我的应用程序上做了这个,希望这对你有用 更新: 1.将segue标识符更改为“sw_right”。 2. 现在在 SWRevealViewController 中 loadStoryboardControllers mehtod 注释首先尝试像这样捕获 -// @try -// { -// [self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil]; -// } -// @catch(NSException *exception) {} 在执行方法中添加此代码 NSString *identifier = self.identifier

2022-05-15 10:52:24    分类:技术分享    ios   swift2   swrevealviewcontroller   xcode7.3

Firebase ,Swift: `runTransactionBlock()` returns null

问题 每次我运行runTransactionBlock时,它都会给我null ,尽管该位置有一个节点:- FIRMutableData(最高交易)(空) 在行:- print(totalPost) func updateTotalNoOfPost(){ let prntRef = FIRDatabase.database().reference().child("TotalPosts") prntRef.observeSingleEventOfType(.Value, withBlock: {(totalSnap) in if totalSnap.exists(){ prntRef.child("noOfTotalPost").runTransactionBlock({ (totalPost: FIRMutableData) -> FIRTransactionResult in print(FIRAuth.auth()!.currentUser!.uid)//Giving me correct userID print(totalPost)//<Null> print(prntRef.child("noOfTotalPost"))//Giving me correct path to that node totalPost.value = totalPost.value as

2022-05-15 01:40:10    分类:技术分享    ios   swift   firebase   swift2   firebase-realtime-database

Swift 2 - NSURLSession Not working

问题 我正在尝试像这样进行 NSURLSession 调用: let requestString = NSString(format: "http://api.com/api/Action/?tag=%d", Int(barcode)!) as String let url: NSURL! = NSURL(string: requestString) urlSession.dataTaskWithURL(url) {(data, response, error) -> Void in do { let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! [AnyObject] print(jsonData) } catch { } } 我的问题是do语句中的代码没有被执行,所以 print 语句没有被执行。 我尝试在catch语句中放置一个print("Error") ,但它甚至没有被执行。 我正在尝试进行同步 NSURLSession 调用,我在这里缺少什么? 回答1 let dataTask = session.dataTaskWithURL(...) dataTask.resume

2022-05-14 15:14:11    分类:技术分享    ios   swift   swift2

How do I iterate through a [String:[String]] Dictionary in Swift

问题 我有一本字典。 var params: [String: [String]] = [:] 我只为第一个键和第一个键分配了一个数组。 现在打印参数打印: ["names" : ["jack", "joe", "jill"]] 如何在这个给定的键处遍历这个数组,以便循环并打印 jack、joe 和 jill? 回答1 for (key, names) in params { for name in names { print("\(name)) } } 回答2 var params: [String: [String]] = ["names" : ["jack", "joe", "jill"]] for key in params.keys { NSLog("%@", key) let list = params[key] for obj in list! { NSLog("%@", obj) } } let params: [String: [String]] = ["names" : ["jack", "joe", "jill"]] for (key, names) in params { print("\(key)") for name in names { print("\(name)") } }

2022-05-14 12:08:05    分类:技术分享    dictionary   swift2

Picking images from cache after prefetching

问题 我正在使用 Kingfisher 框架来预取图像。 Kingfisher 框架的链接是:https://github.com/onevcat/Kingfisher 这是我编写的代码: func downloadImages() { if(self.albumImagePathArray.isEmpty == false) { //dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { let urls = self.albumImagePathArray.map { NSURL(string: $0)! } let prefetcher = ImagePrefetcher(urls: urls, optionsInfo: nil, progressBlock: nil, completionHandler: { (skippedResources, failedResources, completedResources) -> () in print("These resources are prefetched: \(completedResources)") }) prefetcher.start() } } 我不确定如何使用这个框架,因为我对应用程序开发很陌生。

2022-05-14 11:36:15    分类:技术分享    ios   swift   caching   swift2   uiimage

How do I fix UIPopoverPresentationController issue for iPad app? [duplicate]

问题 这个问题在这里已经有了答案: IOS 8 iPad App 在调用 UIActivityViewController 时崩溃5 个答案 iPad 上 Swift 崩溃中的 UIActivityViewController 3 个答案 6年前关闭。 我正在开发一个 iPad 应用程序,当我在模拟器中运行它并点击共享按钮(条形按钮项)时,我收到以下错误消息(iPhone 应用程序没有这个问题)。 我该如何解决? 由于未捕获的异常“NSGenericException”而终止应用程序,原因:“UIPopoverPresentationController (<_UIAlertControllerActionSheetRegularPresentationController: 0x7bfa3c90>) 应该在演示发生之前设置非零 sourceView 或 barButtonItem。” 我的代码如下(前 3 行在 ViewDidLoad 中): self.navigationItem.titleView = titleButton let shareButton: UIBarButtonItem = UIBarButtonItem(image: UIImage(named: "ShareIcon"), style: UIBarButtonItemStyle.Plain

2022-05-13 13:10:04    分类:技术分享    ios   swift2   xcode7

How can swift closure reference properties of class its running from?

问题 我有下面列出的以下 2 个控制器。 我正在使用委托来尝试创建一个progressWindow,它将运行代码并很好地打印它,但代码是任意的。 闭包由符合协议的类定义(在我的情况下为 SyncViewController),但我想从 SyncViewControllers codeToRun {} 闭包更改 progressWindowViewController 的 UI。 我该怎么做呢? SyncViewController.swift import UIKit class SyncViewController: UIViewController, progressWindowDelegate { var codeToRun = { //(self as! ProgressWindowViewController).theTextView.text = "changed the text" print("code to run") } var codeToCancel = {print("code to cancel")} var titleToGive = "Starting Sync..." override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading

2022-05-13 11:21:13    分类:技术分享    ios   swift   swift2   closures   protocols

how to make tabbar based on my json response array (ios swift)

问题 问题:我想根据我的 JSON 响应数组创建标签栏,这意味着,如果我有 6 个元素作为响应,它将创建 6 个标签。 试过:我已经通过使用水平滚动集合视图来实现它,但我想通过原始标签栏来实现它。 那么,我该怎么做呢? please tell me the possible solutions and dont put this on hold.. 这是我的回应,所以我该怎么办? tabs = ( { id = 0; name = Home; }, { id = 1; name = Winkel; }, { id = 2; name = Zoeken; } ); }) 感谢@Ankit 的快速代码,但是当使用您的代码并传递名为“arr”的数组时出现此错误无法将类型“NSMutableArray”的值转换为预期的参数类型“[[String : Any]]” 这是我的代码 func web() { request(.GET, "http://www.horecasupply.nl/AJAX?function=appStructure", parameters: nil, encoding: .JSON).responseJSON { (response:Response<AnyObject, NSError>) -> Void in print(response.result

2022-05-12 17:19:16    分类:技术分享    ios   swift   swift2   uitabbarcontroller   ios9

Using GCD in Swift CLI

问题 所以我试图在 CLI 中使用 GCD。 为了测试它,我写了一些这样的代码: import Foundation var i = 0 print("a: ",i) dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) { for n in 1..<10{ i++ } print("c: ",i) dispatch_async(dispatch_get_main_queue()){ print("d: ",i) } } print("b: ",i) sleep(5) print("e: ",i) 其输出为: a: 0 b: 0 c: 9 e: 9 几秒钟后打印最后一行。 我想知道的是在 d 发生了什么? 我放在那个块中的任何东西似乎都没有执行。 当我在 iOS 中使用它时,这很好用,而不是在 CLI 中。 回答1 CLI 缺乏应用程序的持久性。 它在d有机会被打印之前就结束了(终止)。 正如@user3441734 正确指出的那样,您可以在 CLI 中通过调用dispatch_main()作为退出前的最后一件事来解决此问题。 这个调用有效地迫使我们立即进入主队列并在退出之前拉出主队列块并执行它。

2022-05-12 16:28:04    分类:技术分享    ios   macos   swift2   command-line-interface   grand-central-dispatch