Tag: 迅速

Swift FIRMessaging推送通知令牌重置

我目前正在使用推送通知工作,因此我正在尝试生成推送令牌。 我的问题是什么时候这些到期? 我将每个用户推送令牌存储在我的Firebase数据库中,但是我知道这些令牌过期/重新生成自己。 所以我的问题是,持续推送令牌是最新的最好方法是什么? 每当用户导航到他们的个人资料时,我是否会简单地执行此操作? let token = FIRInstanceID.instanceID().token() ref.child("Users").child(id).child(pushToken).updateChildValues(["tokenid":token]) 你看,现在我要求用户在注册后立即允许推送通知,但不知怎的,它似乎仍然会生成一个令牌ID,即使我拒绝请求。 所以我的问题是,我怎么能保持这个令牌ID更新? 我需要在AppDelegate中做这个吗? 谢谢。 帮助非常感谢!

使用DispatchGroup,DispatchQueue和DispatchSemaphore按顺序执行for循环的Swift 4asynchronous调用

我想按顺序在swift中运行for循环,DispatchGroup将它们放在一起,所以我想使用DispatchQueue和DispatchSemaphore来实现我的目标。 我没有使我的计划工作,我怎么能强迫他们一个一个地等待和运行? let dispatchGroup = DispatchGroup() let dispatchQueue = DispatchQueue(label: "taskQueue") let dispatchSemaphore = DispatchSemaphore(value: 1) for c in self.categories { dispatchSemaphore.wait() dispatchQueue.async(group: dispatchGroup) { if let id = c.categoryId { dispatchGroup.enter() self.downloadProductsByCategory(categoryId: id) { success, data in if success, let products = data { self.products.append(products) } dispatchSemaphore.signal() dispatchGroup.leave() } } } } dispatchGroup.notify(queue: dispatchQueue) […]

UIView作为分隔符弄乱我的约束

我使用UIView作为我的UITableViewCells的分隔符,但在删除单元格时我没有使用任何方法来删除UIView。 我不知道UIView是否被删除当我删除单元格,但其他UIViewControllers的一些button约束搞砸了。 对于这些button,我使用了一种将它们绑定到键盘的方法(当键盘不活动时粘到底部,当键盘处于活动状态时粘在键盘上)完美的工作(testing了一个星期),直到我将此uiview作为分隔符方法添加为止。 尽pipe删除了这个方法,但是我的约束仍然没有完成,我在debugging器中得到了这个 "<NSAutoresizingMaskLayoutConstraint:0x60000029d6a0 h=–& v=–& UIButton:0x7f9a07538760'ADAUGA'.width == 320 (active)>", "<NSLayoutConstraint:0x604000296e40 UIButton:0x7f9a07538760'ADAUGA'.leading == UILayoutGuide:0x6040007a0540'UIViewSafeAreaLayoutGuide'.leading (active)>", "<NSLayoutConstraint:0x604000296df0 UIButton:0x7f9a07538760'ADAUGA'.trailing == UILayoutGuide:0x6040007a0540'UIViewSafeAreaLayoutGuide'.trailing (active)>", "<NSLayoutConstraint:0x60000029bcb0 'UIView-Encapsulated-Layout-Width' UIView:0x7f9a07640bb0.width == 414 (active)>", "<NSLayoutConstraint:0x604000292e30 'UIViewSafeAreaLayoutGuide-left' H:|-(0)-[UILayoutGuide:0x6040007a0540'UIViewSafeAreaLayoutGuide'](LTR) (active, names: '|':UIView:0x7f9a07640bb0 )>", "<NSLayoutConstraint:0x604000293100 'UIViewSafeAreaLayoutGuide-right' H:[UILayoutGuide:0x6040007a0540'UIViewSafeAreaLayoutGuide']-(0)-|(LTR) (active, names: '|':UIView:0x7f9a07640bb0 )>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x604000296df0 UIButton:0x7f9a07538760'ADAUGA'.trailing == UILayoutGuide:0x6040007a0540'UIViewSafeAreaLayoutGuide'.trailing (active)> Make […]

BackBarButton将不会显示正确的标题

我试图把我的backButton设置为一个简单的“<”像这样: self.navigationItem.backBarButtonItem = UIBarButtonItem(title:"", style:.Plain, target:nil, action:nil) print(self.navigationItem.backBarButtonItem?.title) 打印将显示“”,但在模拟器上运行我的应用程序将始终显示前一个VC的标题。 虽然我testing了 navigationController?.navigationBar.tintColor = UIColor(red:0.60, green:0.60, blue:0.60, alpha:1.0) 将改变button的颜色。 注意: 我从一个UINavigationControllerembeddedUIViewController只是一个UIViewController

AVAudioPlayerNode不播放声音

我正在尝试使用下面的代码生成声音。 Everthing罚款没有错误。 但是当我执行这个代码时,没有声音。 我该如何解决这个问题? 顺便说一句,我使用这个例子: http : //www.tmroyal.com/playing-sounds-in-swift-audioengine.html var ae:AVAudioEngine var player:AVAudioPlayerNode? var mixer:AVAudioMixerNode var buffer:AVAudioPCMBuffer ae = AVAudioEngine() player = AVAudioPlayerNode() mixer = ae.mainMixerNode; buffer = AVAudioPCMBuffer(pcmFormat: player!.outputFormat(forBus:0), frameCapacity: 100) buffer.frameLength = 100 // generate sine wave. var sr:Float = Float(mixer.outputFormat(forBus:0).sampleRate) var n_channels = mixer.outputFormat(forBus:0).channelCount var i:Int=0 while i < Int(buffer.frameLength) { var val […]

界面生成器中的图像和标签与TableView单元格中的数据重叠

我是iOS开发的初学者,我想制作一个instagram克隆应用程序,并且在制作instagram克隆应用程序的新闻时遇到问题。 所以我正在使用Firebase来存储图像和数据库。 发布图片(将数据上传到Firebase)后,我想使用从我的Firebase上传的数据填充表格视图。 但是当我运行应用程序时,我的故事板中的虚拟图像和标签与我在表格视图中放置的下载数据重叠。 我下载的数据将最终显示后,我向下滚动 这里是我运行应用程序时的gif http://g.recordit.co/iGIybD9Pur.gif 有3个用户在.gif中显示 用户名(故事板中的虚拟人物) JokowiRI MegawatiRI 在从Firebaseasynchronous下载图像(在加载指示器被解除之后)之后,我预计MegawatiRI将显示在表格的顶部,但是虚拟将首先显示,但是在我向下滚动并返回到顶部之后,MegawatiRI将最终出现。 我相信MegawatiRI已经成功下载了,但我不知道为什么虚拟图像看起来与实际数据重叠。 我不想让我的应用程序运行时显示假人 这里是原型单元格的截图 这里是表视图控制器的简化代码: class NewsFeedTableViewController: UITableViewController { var currentUser : User! var media = [Media]() override func viewDidLoad() { super.viewDidLoad() tabBarController?.delegate = self // to set the dynamic height of table view tableView.estimatedRowHeight = StoryBoard.mediaCellDefaultHeight tableView.rowHeight = UITableViewAutomaticDimension // to erase the […]

iOS:'看起来“Crashlytics”不是一个有效的Fabric Kit

我已经更新了Crashlytics但仍然在启动时出现此错误: 错误:***终止应用程序由于未捕获的exception'FABException',原因:'[织物]看起来“Crashlytics”不是一个有效的光纤套件。 请确保您只通过织物套件[织物:]。 这是我的代码 : func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. Fabric.with([Crashlytics.self]) return true }

DispatchGroup.wait不等

我正在理解或使用Dispatchgroup。 我已经阅读了很多关于他们的文章,但是大多数的例子/文档都很模糊,或者不像我想要做的,但是每次我提到我的问题时,大家都会说“使用派遣组”。 这是我想要做的(注意:连续命令是CRUCIAL): 发送蓝牙写入特征。 设备收到价值,并吐出一些回应 阅读蓝牙响应(通过读取特性) 发送新的写入特征(不同的命令) 设备收到NEW命令,吐出NEW数据响应 重复两次(总共3个命令,总共3个不同的响应)。 我的代码: func tPodInitialSetUp() { print ("* * * * * BEGIN SET-UP * * * * *") let setupDispatchGroup = DispatchGroup() setupDispatchGroup.enter() self.writeValue(command: Data(CommandModeCmd)) //231: Put t-Pod in command mode, burst mode is OFF returns OK setupDispatchGroup.leave() setupDispatchGroup.wait() setupDispatchGroup.enter() deviceConnected?.readValue(for: deviceConnectedCh1n2Char!) print("Sent command 231: returned: \(receivedString1)") […]

在Google地图中移动相机

我正试图将相机在Google地图中移动到指定位置(经纬度)。 这是我的代码/函数,这个代码位于ViewController1(它包含mapView的视图): func select_structure(lat: String, lon: String){ let camera = GMSCameraPosition.cameraWithLatitude(Double(lat)!, longitude: Double(lon)!, zoom: 6.0) mapView = GMSMapView.mapWithFrame(CGRect.zero, camera: camera) mapView.myLocationEnabled = true mapView.mapType = kGMSTypeSatellite mapView.camera = camera view = mapView populate_structures2() let newcamera = GMSCameraPosition.cameraWithLatitude(Double(lat)!, longitude: Double(lon)!, zoom: 17.0) self.mapView.animateToCameraPosition(newcamera) print(mapView) } 当我在ViewController2中调用该代码时,第一次运行应用程序时,它不起作用。 当我使用这个函数时,什么都不会发生 但是我知道它正在被阅读。 而当我运行它的第二,第三等,它的作品! 只是一个简短的说明。 ViewController2是一个滑动菜单。 我从ViewController1调用这个函数: var ClassViewController = self.storyboard!.instantiateViewControllerWithIdentifier("ViewController") […]

获取随机的Firebase数据库条目

我在我的数据库里有这样的用户: users –45jklj4kljfejlk34 // random uid —-id: 1 // I add this manually when creating a user (maybe it helps getting a random user) —-someData: true –454jkljkljefnd4lk —-id: 2 —-someData: true 我想得到一个随机的用户,但我不知道如何。 我试过了。 喜欢这个: let usersCount = DataService.sharedInstance.DB_USER_COUNT let rand = Double(arc4random_uniform(UInt32(usersCount))) + 1 let userRef = DataService.sharedInstance.DB_REF_USERS.queryOrdered(byChild: "id").queryStarting(atValue: rand).queryLimited(toFirst: 1)) 我从数据库中获得usersCount。 在那里,我每增加一个用户就增加一个数字。 但是这不起作用。 这是我得到,如果我打印这个: […]