小编Nyc*_*cen的帖子

你如何解雇UISearchController?(iOS 8及以下版本)

这一定是微不足道的,但我找不到你应该如何以编程方式解雇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)

但我仍然有取消按钮,无法摆脱它.

swift uisearchcontroller

64
推荐指数
4
解决办法
3万
查看次数

Rails:包含多态关联

我读了这篇有趣的文章,关于使用多态来在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

32
推荐指数
2
解决办法
1万
查看次数

在钥匙串中存储电子邮件是不可能的(KeychainItemWrapper)

我正在使用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)

你对这里可能出现的问题有什么看法吗?

谢谢

objective-c keychain ios automatic-ref-counting

18
推荐指数
1
解决办法
1万
查看次数

确定具有特定样式的图像存在和缺席 - Paperclip导轨

有没有办法确定给定图像样式的存在?

例如,要确定图像是否存在,我们可以:

    <% if @user.avatar.exists? %>
      <%= image_tag @user.avatar.url(:large), :id => "cropbox" %>  
Run Code Online (Sandbox Code Playgroud)

但是,我们如何确定图像是否以特定的样式存在,比如说thumb?上述条件仅确定其original样式中图像的存在.

upload ruby-on-rails image paperclip

10
推荐指数
2
解决办法
2093
查看次数

Paperclip 4,Amazon S3&rspec:如何存根文件上传?

我正在用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中消失了.

现在这样做的正确方法是什么?

谢谢

rspec ruby-on-rails amazon-s3 paperclip

10
推荐指数
2
解决办法
4728
查看次数

Stripe:网络钩子事件顺序

您应该如何处理通过 webhooks 接收的事件可以以随机顺序接收的事实?

例如,给定以下有序事件:

  • A:invoiceitem.created(数量为1)
  • B:invoiceitem.updated(数量从 1 到 3)
  • C:invoiceitem.updated(数量从 3 到 2)

您如何确保接收 CAB 不会导致数据损坏(即数量为 2 而不是 3)?

如果 Event#data 中的 previous_attributes 与当前 state 不对应,您可以拒绝 webhook,但是如果您的本地模型已经更新,您就会被卡住,因为您永远不会发现自己处于 webhook 期望的状态。

或者,您可以使用将任何 webhook 视为检索和更新对象的提示。您只需忽略 webhook 发送的数据并始终检索它。即使您收到按 update/delete/create 排序的事件,它也应该可以工作,因为 update 实际上会创建对象,delete 会删除它,而 create 将无法检索对象并且什么都不做。但是,每次 webhook 将数据作为事件数据提供时,都感觉检索数据是一种资源浪费。

之前有人问过这个问题但答案不包括上述解决方案。

谢谢

api webhooks stripe-payments

7
推荐指数
1
解决办法
1052
查看次数

ActiveRecord:使用where子句时不考虑毫秒数

我正在开发一个带有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)

因此,当我没有得到任何结果时,我总是得到至少一个结果,因为毫秒被截断.

如何在查询中考虑这些因素?

datetime ruby-on-rails milliseconds

6
推荐指数
1
解决办法
1739
查看次数

Paperclip:copy_to_local_file在每次更新时调用(不相关的属性)

我正在使用带有Amazon S3的paperclip 4.1.0.我想知道为什么请求如此缓慢,并且发现每当我更新带有附件的模型的属性时都会调用"copy_to_local_file",即使它只是一个与附件无关的属性(在我的例子中,是cache_count,这意味着每个当有人投票给实例时,附件会在本地下载!).

我知道它用于需要回滚的情况,但是当属性与附件没有直接关系时,它似乎有些过分.

我是以错误的方式使用回形针还是可以改进的东西?

谢谢你的帮助

ruby-on-rails amazon-s3 paperclip ruby-on-rails-4

6
推荐指数
1
解决办法
991
查看次数

照片框架:从拾取器中保存exif数据(光圈,焦距,快门速度......)

我试图用新的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框架在图像中保存元数据?

exif metadata uiimagepickercontroller ios swift

6
推荐指数
1
解决办法
1509
查看次数

保存NSManagedObjectContext而不点击主线程

我正在做的事情:

  • 使用Web API执行后台同步而不冻结UI.我正在使用MagicalRecord,但它并不是特定的.
  • 确保我正确使用上下文等

我的问题是什么:我的理解是否正确?最后还有几个问题.

因此,MagicalRecord提供的上下文是:

  • PrivateQueueConcurrencyTypeMR_rootSavingContext,用于将数据持久化到商店,这是一个缓慢的过程
  • MainQueueConcurrencyTypeMR_defaultContext
  • 对于背景,您可能希望使用MR_context()生成的上下文,MR_context()MR_defaultContext子项,并且是PrivateQueueConcurrencyType

现在,为了以异步方式保存,我们有两个选择:

  • MR_saveToPersistentStoreWithCompletion()将一直保存到MR_rootSavingContext并写入磁盘
  • MR_saveOnlySelfWithCompletion()将仅保存到父上下文(即MR_defaultContext,用于使用MR_context创建的上下文)

从那里开始,我认为我可以在不冻结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)

multithreading objective-c ios magicalrecord swift

6
推荐指数
1
解决办法
2295
查看次数

NSPersistentContainer和UnitTests与iOS10

我的单元测试核心数据设置存在问题.

我在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)

core-data ios swift ios10

5
推荐指数
1
解决办法
559
查看次数

iOS10 是否删除了从包中读取 SQLite 数据库的功能?

我使用 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)

sqlite core-data ios ios10

4
推荐指数
1
解决办法
1179
查看次数

gmaps4rails v2 - 地图类型

如何将地图类型设置为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)

谢谢

google-maps ruby-on-rails gmaps4rails

2
推荐指数
1
解决办法
512
查看次数