这一定是微不足道的,但我找不到你应该如何以编程方式解雇UISearchController?
请注意,它是新的UISearchController(2014年推出iOS 8),而不是UISearchDisplayController.
到目前为止,这就是我所拥有的
// Dismiss the search tableview
searchController.dismissViewControllerAnimated()
// Clear the Search bar text
searchController.active = false
Run Code Online (Sandbox Code Playgroud)
但我仍然有取消按钮,无法摆脱它.
我读了这篇有趣的文章,关于使用多态来在Rails中创建更好的活动源.
我们最终得到类似的东西
class Activity < ActiveRecord::Base
belongs_to :subject, polymorphic: true
end
Run Code Online (Sandbox Code Playgroud)
现在,如果其中两个主题是例如:
class Event < ActiveRecord::Base
has_many :guests
after_create :create_activities
has_one :activity, as: :subject, dependent: :destroy
end
class Image < ActiveRecord::Base
has_many :tags
after_create :create_activities
has_one :activity, as: :subject, dependent: :destroy
end
Run Code Online (Sandbox Code Playgroud)
将create_activities定义为
def create_activities
Activity.create(subject: self)
end
Run Code Online (Sandbox Code Playgroud)
客人和标签定义为:
class Guest < ActiveRecord::Base
belongs_to :event
end
class Tag < ActiveRecord::Base
belongs_to :image
end
Run Code Online (Sandbox Code Playgroud)
如果我们查询记录的最后20个活动,我们可以这样做:
Activity.order(created_at: :desc).limit(20)
Run Code Online (Sandbox Code Playgroud)
我们有第一个N + 1查询问题,我们可以通过以下方式解决:
Activity.includes(:subject).order(created_at: :desc).limit(20)
Run Code Online (Sandbox Code Playgroud)
但是,当我们呼叫访客或标签时,我们会遇到另一个N + 1查询问题.
为了能够使用分页,解决这个问题的正确方法是什么?
performance activerecord ruby-on-rails polymorphic-associations
我正在使用github上提供的ARCified版KeychainItemWrapper ,我无法将它存储在电子邮件和密码中.
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"myApp" accessGroup:@"MY_APP.com.yourcompany.GenericKeychainSuite"];
[keychainItem setObject:[self.email dataUsingEncoding:NSUTF8StringEncoding] forKey:(__bridge id)kSecAttrAccount];
[keychainItem setObject:self.password forKey:(__bridge id)kSecValueData];
Run Code Online (Sandbox Code Playgroud)
只要我存储一封没有符号(@)的电子邮件,我的工作就完美了.否则,我收到错误
*** Assertion failure in -[KeychainItemWrapper writeToKeychain]
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't add the Keychain Item.'
Run Code Online (Sandbox Code Playgroud)
哪些来自这些方面
result = SecItemAdd((__bridge CFDictionaryRef)[self dictionaryToSecItemFormat:keychainItemData], NULL);
NSAssert( result == noErr, @"Couldn't add the Keychain Item." );
Run Code Online (Sandbox Code Playgroud)
你对这里可能出现的问题有什么看法吗?
谢谢
有没有办法确定给定图像样式的存在?
例如,要确定图像是否存在,我们可以:
<% if @user.avatar.exists? %>
<%= image_tag @user.avatar.url(:large), :id => "cropbox" %>
Run Code Online (Sandbox Code Playgroud)
但是,我们如何确定图像是否以特定的样式存在,比如说thumb?上述条件仅确定其original样式中图像的存在.
我正在用rspec编写测试,而且我对Paperclip 4有点挣扎.目前我正在使用webmock来存根请求,但图像处理正在减慢测试速度.
我读到的所有内容都建议使用这样的存根:
Profile.any_instance.stub(:save_attached_files).and_return(true)
Run Code Online (Sandbox Code Playgroud)
它不起作用:据我所知,save_attached_files在Paperclip 4中消失了.
现在这样做的正确方法是什么?
谢谢
您应该如何处理通过 webhooks 接收的事件可以以随机顺序接收的事实?
例如,给定以下有序事件:
您如何确保接收 CAB 不会导致数据损坏(即数量为 2 而不是 3)?
如果 Event#data 中的 previous_attributes 与当前 state 不对应,您可以拒绝 webhook,但是如果您的本地模型已经更新,您就会被卡住,因为您永远不会发现自己处于 webhook 期望的状态。
或者,您可以使用将任何 webhook 视为检索和更新对象的提示。您只需忽略 webhook 发送的数据并始终检索它。即使您收到按 update/delete/create 排序的事件,它也应该可以工作,因为 update 实际上会创建对象,delete 会删除它,而 create 将无法检索对象并且什么都不做。但是,每次 webhook 将数据作为事件数据提供时,都感觉检索数据是一种资源浪费。
谢谢
我正在开发一个带有rails api和iOS客户端的项目,使用updated_at字段作为参考来检测服务器上的最后一次拉动后发生的修改.
updated_at datetime的精度以毫秒为单位,这意味着
Model.updated_at.to_f
Run Code Online (Sandbox Code Playgroud)
返回类似"1368977381.063427"的内容.这将发送到格式为"2013-05-19T15:29:41.063427000Z"的客户端.
问题是,当我从客户端返回该日期时间,解析它并用它查询时,毫秒就会丢失.
last_update = DateTime.strptime("2013-05-19T15:29:41.063427000Z", "%Y-%m-%dT%H:%M:%S.%N%z")
Model.where("updated_at > ?", last_update)
Run Code Online (Sandbox Code Playgroud)
和做的一样好
last_update = DateTime.strptime("2013-05-19T15:29:41Z", "%Y-%m-%dT%H:%M:%S%z")
Model.where("updated_at > ?", last_update)
Run Code Online (Sandbox Code Playgroud)
因此,当我没有得到任何结果时,我总是得到至少一个结果,因为毫秒被截断.
如何在查询中考虑这些因素?
我正在使用带有Amazon S3的paperclip 4.1.0.我想知道为什么请求如此缓慢,并且发现每当我更新带有附件的模型的属性时都会调用"copy_to_local_file",即使它只是一个与附件无关的属性(在我的例子中,是cache_count,这意味着每个当有人投票给实例时,附件会在本地下载!).
我知道它用于需要回滚的情况,但是当属性与附件没有直接关系时,它似乎有些过分.
我是以错误的方式使用回形针还是可以改进的东西?
谢谢你的帮助
我试图用新的Photo框架做相当于writeImageToSavedPhotosAlbum.
要保存图像,我只这样做:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
let image = info[UIImagePickerControllerOriginalImage] as UIImage
PHPhotoLibrary.sharedPhotoLibrary().performChanges({ () -> Void in
let changeRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(image)
}, completionHandler: { (success, error) -> Void in
//
})
}
Run Code Online (Sandbox Code Playgroud)
当然,没有魔法,因为我什么都不做
info[UIImagePickerControllerMediaMetadata]
Run Code Online (Sandbox Code Playgroud)
,上面的代码不会将任何元数据保存到"相机胶卷",因为当我将iPhone连接到Mac时,您可以使用Preview.app的屏幕截图看到.

您可以通过打开Preview.app,从"您的设备名称"中选择"文件">"导入"来获取该视图; 然后你可以浏览你的照片,看看用相机应用程序拍摄的照片会显示焦距等exif数据,而使用上面代码保存的数据会显示空值.
现在,creationRequestForAssetFromImage的文档说:
要设置新创建的资产的元数据属性,请使用更改请求的相应属性(在"修改资产"中列出).
哪个链接到"+ changeRequestForAsset:"和4个属性(creationDate,location,favorite,hidden),这有点轻松.那些人可能想要保存的其他属性(如光圈,焦距,快门速度......)?
你应该如何使用Photo框架在图像中保存元数据?
我正在做的事情:
我的问题是什么:我的理解是否正确?最后还有几个问题.
因此,MagicalRecord提供的上下文是:
现在,为了以异步方式保存,我们有两个选择:
从那里开始,我认为我可以在不冻结UI的情况下执行以下操作(让我们称之为尝试#1):
let context = NSManagedObjectContext.MR_context()
for i in 1...1_000 {
let user = User.MR_createInContext(context) as User
context.MR_saveOnlySelfWithCompletion(nil)
}
// I would normally call MR_saveOnlySelfWithCompletion here, but calling it inside the loop makes any UI block easier to spot
Run Code Online (Sandbox Code Playgroud)
但是,我的假设是错误的.我查看了 MR_saveOnlySelfWithCompletion并发现它依赖于它
[self performBlock:saveBlock];
Run Code Online (Sandbox Code Playgroud)
异步执行接收器队列上的给定块.
所以我有点困惑,因为我希望它不会因此而阻止UI.
然后我尝试了(让我们称之为尝试#2)
let context …Run Code Online (Sandbox Code Playgroud) 我的单元测试核心数据设置存在问题.
我在AppDelegate中使用默认/新的Core Data堆栈设置
class AppDelegate: UIResponder, UIApplicationDelegate {
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "GenericFirstFinder")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
}
Run Code Online (Sandbox Code Playgroud)
为了测试,我有一个自定义函数来创建托管上下文
func setupInMemoryManagedObjectContext() -> NSManagedObjectContext {
let container = NSPersistentContainer(name: "GenericFirstFinder")
let description = NSPersistentStoreDescription()
description.type = NSInMemoryStoreType
container.persistentStoreDescriptions = [description]
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)") …Run Code Online (Sandbox Code Playgroud) 我使用 2 个 SQLite 数据库:一个是捆绑包的一部分并存储静态/只读数据(称为 Seed.sqlite),另一个在首次启动时创建(或自动迁移)并用于保存用户数据(用户.sqlite)。
使用以下选项设置管理只读数据库 (Seed.sqlite) 的持久存储:
options[NSReadOnlyPersistentStoreOption] = true
options[NSSQLitePragmasOption] = ["journal_mode": "DELETE"]
Run Code Online (Sandbox Code Playgroud)
它在模拟器中的 iOS 9.x 和 iOS 10 下运行良好,但在运行 iOS 10(至少是 beta 4 和 8)的设备上使用时会崩溃。
我对 User.sqlite 数据库没有任何问题。
到目前为止,上述配置使 CoreData 符合设备上的限制(即:无法编辑捆绑文件)。在 iOS 10 上,情况似乎仍然如此:当删除上述选项时,会创建临时文件(在模拟器中运行时,因为在这种情况下包是可写的),否则,文件保持不变。所以它的行为似乎和以前一样,但它仍然在设备上崩溃。
这就是异常发生的地方。提到了“PFUbiquityTransactionHistoryCache writePendingEntries:”。尝试在包中写一些东西可能会解释崩溃,但我不明白为什么会调用它。
从异常中调用 po $arg1 返回“无法创建支持目录(无法创建目录)(空)”
CoreData`developerSubmittedBlockToNSManagedObjectContextPerform:
0x189f45ad0 <+0>: stp x28, x27, [sp, #-96]!
0x189f45ad4 <+4>: stp x26, x25, [sp, #16]
0x189f45ad8 <+8>: stp x24, x23, [sp, #32]
0x189f45adc <+12>: stp x22, x21, [sp, …Run Code Online (Sandbox Code Playgroud) 如何将地图类型设置为HYBRID或SATELLITE?我认为传递给提供者哈希是一些选择,但如果是这种情况我找不到合适的哈希.
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
markers = handler.addMarkers([
{
"lat": 0,
"lng": 0,
"picture": {
"url": "https://addons.cdn.mozilla.net/img/uploads/addon_icons/13/13028-64.png",
"width": 36,
"height": 36
},
"infowindow": "hello!"
}
]);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
});
Run Code Online (Sandbox Code Playgroud)
谢谢
ios ×5
swift ×4
paperclip ×3
amazon-s3 ×2
core-data ×2
ios10 ×2
objective-c ×2
activerecord ×1
api ×1
datetime ×1
exif ×1
gmaps4rails ×1
google-maps ×1
image ×1
keychain ×1
metadata ×1
milliseconds ×1
performance ×1
rspec ×1
sqlite ×1
upload ×1
webhooks ×1