我现在已经实现UILocalNotifications
了两个不同的应用程序.一个使用位置服务,这意味着如果它被杀死,它(通常)会重新启动(所以它不是一个大问题).但是,在另一个应用程序中,我UILocalNotification
根据时间安排.在这种情况下,我遇到了一个重大问题.
如果我安排通知,那么应用程序会被杀死,推出内存,电话关闭然后再打开,我无法在打开应用程序时"自动"查看旧通知.
这是有效的工作流程(app在后台运行):
下面是它工作流程无法正常工作(应用程序不再在后台运行):
didReceiveLocalNotification
调用该方法.用户认为该应用程序不起作用.有什么方法可以知道当应用程序没有在后台运行时它们触及了哪个通知(因此没有运行didReceiveLocalNotification method
)?
我已经看到了与此错误相关的其他问题,但我没有看到有人提到我目前遇到的问题.请注意,在转换为Swift 4之前,我对此代码没有任何问题.
以下是有问题的代码:
let verseNotification = NSManagedObject(entity: entity, insertInto: self.managedObjectContext) as! VerseNotification
verseNotification.date_scheduled = NSDate(timeIntervalSinceNow: finalTimeToScheduleSinceNow)
Run Code Online (Sandbox Code Playgroud)
请注意,该属性date_scheduled
的类型为Date
:
@NSManaged public var date_scheduled: Date?
Run Code Online (Sandbox Code Playgroud)
当我构建我的应用程序以在我的物理iPhone(iPhone 7)上的DEBUG中部署时,我收到以下错误(从Swift 3转换为Swift 4之后):
Cannot assign value of type 'NSDate' to type 'Date?' - Insert 'as Date'
Run Code Online (Sandbox Code Playgroud)
正如它所说的那样解决问题...所以,现在我的代码是这样的:
verseNotification.date_scheduled = NSDate(timeIntervalSinceNow: finalTimeToScheduleSinceNow) as Date
Run Code Online (Sandbox Code Playgroud)
...直到我将目标切换到模拟器.当我将目标切换为模拟器iPhone 7设备时,我现在收到以下错误:
'NSDate' is not implicitly convertible to 'Date'; did you mean to use 'as' to explicitly convert?
Run Code Online (Sandbox Code Playgroud)
关于这个错误的混淆是,正如你在上面看到的那样,我明确地转换为类型Date
.具有讽刺意味的是,我能够摆脱模拟器iPhone 7的这个错误的唯一方法就是删除as Date
我在第一步中添加的错误.
到底是怎么回事?我错过了什么?
我担心为"通用设备"构建发布版本,不知道为什么我会收到冲突的错误.
更新 我发现了一些新的,非常有趣的东西.
当我构建部署到我的物理iPhone …
我已经尝试了很多东西,在这一点上发布代码可能会令人困惑,所以让我从这个概念开始.
我需要以某种方式将长按和触摸拖动的操作组合到一个操作中,例如LongPressThenDragGestureRecognizer.我试图在MKMapView上完成这个,所以我不能一直禁用用户交互,因为我想要地图的平移和缩放功能.
为了使事情复杂化,需要删除用户长按以识别交互的初始项(MKOverlay对象)并用新绘制的对象替换.此时,代码不再关心对象,仅在手指处于任何给定点的位置(我将在移动时重绘拖动的对象).
这是工作流程:
到目前为止,我已经尝试了很多东西,但收效甚微.我到目前为止的最佳结果如下所示.这是使用MKMapView对象上的UILongPressGestureRecognizer(检查与叠加的交集)完成的,然后覆盖touchesBegan以进行地图触摸拖动.
我非常接近,我只是不知道如何将手势合二为一,这样用户就不必抬起手指再次触摸以开始拖动.
任何想法都非常感谢.
我有一个子类UITableViewCell的类.我需要在创建单元格时初始化单元格中的一些值,并且我使用以下方法创建它:
NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil];
Run Code Online (Sandbox Code Playgroud)
通过XCode"添加新文件"界面创建子类时,我得到以下方法:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]))
{
self.selectionStyle = UITableViewCellSelectionStyleBlue;
[txtField setEnabled:YES];
[txtField setTextColor:[UIColor redColor]];
[txtField setPlaceholder:@"Fake Placeholder - Test Initialize"];
[contactBtn setEnabled:YES];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
此方法中的代码永远不会被执行.我怎么能做到这一点?如果这不是实例化对象时使用的方法(使用NSBundle loadNibNamed),那么是什么?如何通过这种方式从笔尖创建单元格时初始化单元格?
任何帮助是极大的赞赏.
我有一个自定义的MKAnnotationView子类.它完全按照我的要求显示视图.在那个视图中,我有一个按钮.我想捕获按钮上的事件以执行操作.这很好用.
但是,我不希望标注被解雇或消失.基本上,触摸标注中的按钮将开始播放声音,但我想保留注释,以便用户可以按下停止,而无需再次触摸地图图钉以重新注释注释.在另一个例子中,我希望按钮触摸可以在标注中设置更多细节的动画,因此我绝对不想在此时关闭标注.
每当用户选择标注或标注内的按钮时,如何防止标注消失?
我正在使用iCloud Key-Value Data存储解决方案,因此我不使用文档(UIDocument).我已经实现了同步,它似乎运行良好.但是,我现在需要做一些更详细的测试,我无法弄清楚如何强制删除iCloud上的数据.
如何从iCloud帐户中删除数据以进行测试?
我试过这个:
[[NSUbiquitousKeyValueStore defaultStore] setArray:[[NSArray alloc] init] forKey:@"iCloud_BG_KEY"];
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
[[NSUbiquitousKeyValueStore defaultStore] setArray:nil forKey:@"iCloud_BG_KEY"];
Run Code Online (Sandbox Code Playgroud)
除了为我的应用程序关闭iCloud Backup(设置> iCloud>存储和备份>管理存储> [my_backup_device]>显示所有应用程序> [我的应用程序]).
当然,我正在删除我的应用程序并重建并运行xcode.
如何强制删除iCloud文件(同样,对于键值数据存储)?
我真的很难在我的应用程序中耗尽内存.这是我正在执行的基本操作,如下所述.请注意,每当用户使用相机拍摄照片时,我会保存两个不同版本的照片 - 一个是预览(用于快速加载),另一个是高质量的缩放和稍后标记.
这是我的操作顺序列表:
UIImagePickerController
这不是什么大问题,但是当我回去(导航控制器弹出)时,"Image IO"类型和"Dirty"类型的大小都没有减小.就像UIImageView没有被破坏一样.每次我按下这个视图控制器并加载一个图像,大小增加30MB,弹出永远不会减少它.
我正在使用ARC,所以我不会自己调用release,但是当我弹出视图控制器时,我希望它会被破坏.
仅供参考,我用于保存预览的设置和完整图像是:
预习: [UIImageJPEGRepresentation([UIImage imageWithImage:image scaledToSize:CGSizeMake(300, 400)], 0.4f) writeToFile:previewPath atomically:NO];
充分: [UIImageJPEGRepresentation(image , 0.8f) writeToFile:imagePath atomically:NO];
我主要担心的是(1)在弹出包含视图控制器之后弄清楚如何摆脱UIImage使用的内存,但我也想知道(2)为什么加载时图像为30MB.
我知道如何使用 Core Graphics 绘制简单的线条。我现在需要绘制一条尺寸线进行测量。有关我需要绘制的示例(红色),请参见下图。顶线很容易,但在对角线上绘制垂直线需要一些数学运算,我现在很难弄清楚。
每条主线都以 (x,y) 作为起点,以 (x1,y1) 作为终点。然后我需要绘制在每个点 (x,y) 和 (x1,y1) 处相交的垂直线。
计算这些垂直线的点所需的数学是什么?