天道酬勤,学无止境

ios

实时删除 NSTimer/UITableViewCell?(Delete NSTimer/UITableViewCell in real time?)

问题 我有一个UITableView ,其中我在每个UITableViewCell上设置了许多计时器。 每个计时器从用户在我的应用程序上创建“帖子”时开始,并应在 24 小时内到期。 但是,我想要这样,当所有 24 小时结束时, UITableViewCell会实时删除自己,但我似乎无法弄清楚应该在何处或何时删除计时器。 我有一种方法可以使用NSTimer.scheduledTimerWithTimeInterval不断刷新计时器,并且每秒更新每个UITableViewCell上的计时器。 但是,我找不到方法或找不到如何找到每个 UITableViewCell 中的每个计时器是否已完成。 显然,我可以找到计时器是否在viewDidLoad完成,但只有在视图变为活动状态时才会调用。 有没有我遗漏的方法或我可以使用的任何方法来查找通过scheduledTimerWithTimeInterval方法的计时器是否已完成,如果已完成,将其删除? 这是我的代码如下: //I have a self.offers array declared in the beginning of my class whcih will act as the UITableView data source. var offers = [Offer]() func tableView(tableView

2021-09-20 17:35:08    分类:技术分享    ios   uitableview   swift   timer   nstimer

如何在用户授予权限后以编程方式发送短信?(How to programmatically send a text message after the user has given permission?)

问题 我正在编写一个应用程序,我需要能够在后台发送文本。 我看到了对类似问题的这个非常全面的答案,该答案解释了如何通过与用户的界面发送短信以及以编程方式发送消息的各种限制,但它并没有真正解决另一种可能性:用户是否可以授予允许我的应用程序在后台发送消息类似于用户必须如何授予应用程序访问用户照片的权限? 例如,在第一次启动应用程序时,会出现一个提示,询问用户是否允许发送短信。 如果用户授予权限,则应用程序可以在后台发送消息。 那可能吗? 回答1 这个问题的答案是你不能。 有一些越狱应用程序可以实现这一点,但它们只需要越狱(和私有 API)。 没有 App Store 允许的方式来做到这一点。

2021-09-20 17:25:24    分类:技术分享    ios   objective-c   iphone   sms

Swift - 创建一个在编译时强制执行的固定长度数组(Swift - create a fixed length array enforced at compile time)

问题 我想使用特定类型的 5 个元素强制执行(编译时)数组 我找不到解决方案,因此通过创建元组求助于解决方法 (我知道这是侮辱性的) typealias FiveElementArray = (MyType,MyType,MyType,MyType,MyType) // mock array by using typed tuple 它适用于我的需要 - 直到我需要在运行时按索引访问元素。 例如: var DB = FiveElementArray // the tuple of 5 elements tableView(tableView : UITableView,cellForRowAtIndexPath:indexPath) -> UITableViewCell { // would like to populate with the value at index DB[indexpath.row] // no such syntax for tuples } 那么如何使用具有静态类型长度的正确 swift 数组 回答1 防止对值类型(例如数组)进行不必要更改的方法是在其上放置一个didSet观察者以充当警卫: var arr = [1, 2, 3, 4, 5] { didSet { if arr.count > 5 {arr = oldValue} } } arr

2021-09-20 17:09:54    分类:技术分享    ios   swift   tuples   compile-time

通过Objective-C中的CoreTelephony.framework私有API获取MCC和MNC(Getting the MCC and MNC by means of CoreTelephony.framework private API in Objective-C)

问题 我需要获取当前国家/地区的MCC和MNC代码(不是来自 SIM 母国的 CTCarrier 类)。 我为CoreTelephony.framework使用私有 API。 在我的设备上一切正常。 但是在CellMonitorCallback方法中的其他设备上,我们获得了cells = NULL 。 可能有人可以帮助我做错了什么? #import "AMCoreTelephone.h" #import <CoreTelephony/CTCarrier.h> #import <CoreTelephony/CTTelephonyNetworkInfo.h> struct CTResult { int flag; int a; }; extern CFStringRef const kCTCellMonitorCellType; extern CFStringRef const kCTCellMonitorCellTypeServing; extern CFStringRef const kCTCellMonitorCellTypeNeighbor; extern CFStringRef const kCTCellMonitorCellId; extern CFStringRef const kCTCellMonitorLAC; extern CFStringRef const

2021-09-20 16:59:47    分类:技术分享    ios   objective-c   iphone-privateapi   core-telephony

iOS 4 是否让 3rd 方开发者可以使用“真正的多任务处理”?(Does iOS 4 make “Real Multitasking” available to 3rd party developers?)

问题 自从第一个测试版问世以来,我一直试图找出“真正的”多任务处理是否可能——即你能否将一个程序置于后台并无限期地挂在网络连接上? 例如,我正在考虑 IM 或 IRC 应用程序。 我自己在 iOS 4 上编译了一个应用程序,并且没有改变它似乎保持在后台运行的任何东西,但据我所知,它只是暂停到内存中。 文档说你能做的最好的事情是请求最多 10 分钟,但在开发者演示中,他们展示了 Skype 坐​​在后台然后通知用户有电话进来。有谁知道这一切是如何工作的? 回答1 看来答案是否定的。 Skype 的 API 是一种非常特殊的情况,称为“voip”模式,它需要特殊的行为,例如标记用于 VoIP 的套接字。 您可以在后台接收警报通知(例如时间过去)。 您处于后台运行状态的时间受到操作系统的严重限制。 Android 的后台模型是完整的,并且在很多方面都更好。 Apple 有一个名为“在您的应用程序中支持多任务处理”的指南,您应该可以找到它。 回答2 Apple 的 iOS 4 开发人员文档非常清楚地概述了这一切。 当您的应用程序关闭或关闭时,它几乎会立即“暂停”,这意味着操作系统会冻结应用程序的状态。 当用户切换回您的应用程序时,您的代码会继续在它停止的地方运行。 您无需向应用程序添加任何代码即可执行此操作,只需针对 OS 4 进行编译即可。 以上在大多数情况下都是正确的。 “暂停

2021-09-20 16:58:11    分类:技术分享    iphone   ios   ios4

如何使用 KIF 测试框架自动确认系统警报?(How to acknowledge system alerts automatically using KIF test framework?)

问题 我使用 KIF 来测试 UI 以进行持续集成。 当应用程序首次在设备(或iOS 模拟器)上启动时,系统会显示一些警报视图以确保安全。 KIF如何自动确认系统警报以防止测试失败? 回答1 最好的方法是使用[tester acknowledgeSystemAlert] 。 它将单击系统警报中的最后一个按钮:) 有关更多信息,请参阅此 github 线程。

2021-09-20 16:48:55    分类:技术分享    ios   kif

解析错误代码 209 和 -34018(Parse error codes 209 and -34018)

问题 我花了几个小时在 Parse 上学习用户管理,认为考虑到它已经成为一项长期服务,这很容易。 关于“自动用户”和会话的文档很差。 我正在尝试构建一个允许用户在决定注册之前匿名存在的应用程序(使用[PFUser enableAutomaticUser] )。 注册步骤: 从 UI 收集用户详细信息注销当前自动用户并等待成功成功后使用[PFUser user]创建用户对象并赋值在新用户实例上调用signUpInBackgroundWithBlock 在执行上述操作时,我有时会遇到以下错误(是的,只是有时)。 [错误]:PFKeychainStore 无法获取键“currentUser”的对象,错误:-34018 [错误]:无效的会话令牌(代码:209,版本:1.7.0) 我也最终得到了一个脏数据库,因为我不知道如何删除之前创建的自动用户。 我尝试保留旧用户的对象 ID 并使用deleteEventually但这不起作用? 关于如何实现这一目标的任何建议都会很棒。 回答1 在 iOS 上用解析看看这个问题:https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/issues/437。 我相信这是 iOS 中的一个问题,现在已修复 回答2 其实这是keychain的一个bug,你可以在github上搜索。 Github 34018 问题

2021-09-20 16:45:51    分类:技术分享    ios   parse-platform

如何使用 Swift 更改按钮的高度?(How can I change the height of a button with Swift?)

问题 根据屏幕的高度,我想调整视图中按钮的高度。 在 Swift 中最简单的方法是什么? 我以这种方式尝试过,也尝试过CGRectMake()但没有任何改变: self.myButton.frame.size.height = self.myButton.frame.size.height*scrOpt 如何“更新”框架? 回答1 您看不到任何更改的原因可能是因为您使用的是 AutoLayout,并且按钮应用了一些约束,您需要更改高度约束才能完成您想要的操作。 编辑:直接更改框架属性在 Swift 中似乎是可能的,但在 Objective C 中是不可能的。 回答2 如果您使用自动布局,则需要更新其高度约束,否则更新其框架 NSLog(@"%@",NSStringFromCGRect(self.myButton.frame)); NSLog(@"%f",scrOpt); self.myButton.frame = CGRectMake(self.myButton.frame.origin.x, self.myButton.frame.origin.y, self.myButton.frame.size.width, self.myButton.frame.size.height*scrOpt) NSLog(@"%@",NSStringFromCGRect(self.myButton

2021-09-20 16:43:31    分类:技术分享    ios   swift   button   height

从 Enum 获取数据以显示在 UIPickerView 上(Take data from Enum to show on UIPickerView)

问题 我正在创建一个简单的视图,其中有一个 UIPickerView,我想从枚举中显示 PickerView 上的选择。 我创建了一个可能的饮料枚举 enum drink{ case coffee case tea case cola case water } 我想知道如何在 UIPickerView 中显示饮料? 我正在使用 Swift 1.2 和 Xcode 6.3.1 ..谢谢!! :) 回答1 正如ABakerSmith所提到的,您可以使用 Printable 协议在UIPickerView显示String 。 最后,您可以拥有一个如下所示的ViewController : // // ViewController.swift // Test // // Created by Stefan Veis Pennerup on 04/05/15. // Copyright (c) 2015 Kumuluzz. All rights reserved. // import UIKit class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { @IBOutlet weak var pickerView: UIPickerView! enum Drink: Int

2021-09-20 16:42:44    分类:技术分享    ios   swift   enums   uipickerview

NSFileManager URL 与路径(NSFileManager URL vs Path)

问题 为什么推荐使用NSFileManager类的moveItemAtURL:toURL:error:这样的 URL 方法而NSFileManager像moveItemAtPath:toPath:error:这样的 Path 方法? 回答1 When NSURL objects are created it's also checked that the path is valid, otherwise the object is not created. The path ones are created even if it's an invalid path. There are no checks made at all.

2021-09-20 16:38:03    分类:技术分享    ios   url   nsfilemanager