小编Ada*_*amG的帖子

CLLocationManager geo-fencing/startMonitoringForRegion:与startMonitoringForSignificantLocationChanges:对比10分钟startUpdating调用

我正在尝试设置一个应用程序,该应用程序可以在后台检查人员的位置,查看他们是否位于给定位置,如果是,则将ping发送到服务器.我们不想耗尽用户的精力,因此我们试图找出最佳解决方案.

我已经做了大量阅读,但我没有找到关于这些方法的大量信息.我会理解他们现在理解的优点和缺点

startMonitoringForSignificantChanges

描述:基于Wi-Fi和蜂窝塔的变化,系统唤醒了应用程序.

文件:

只要设备从之前的通知移动500米或更长时间,应用就会收到通知.它不应该比每五分钟更频繁地预期通知.如果设备能够从网络检索数据,则位置管理器更有可能及时发送通知.

优点:

  • 大多数电池效率

缺点:

  • 取决于Wi-Fi /蜂窝塔的变化
  • 只能假设每200米到2公里(如果不是更多在某些区域)
  • 更多关于准确性
  • 因此,不一致和不精确

10分钟的开始更新或"n分钟更新":

描述:这基本上要求应用程序有更多时间,当额外时间即将到期时,它调用[self.locationManager startUpdating],抓取位置并将后台线程扩展10分钟.

优点:

  • 一贯
  • 可以像您希望的那样准确无误地保持一致

缺点:

  • 必须每隔十分钟或更短时间拨打电话以保持应用在后台运行(即呼叫的n不能大于10)

问题:这对电池有什么影响?唤醒GPS并将其关闭会对电池造成更大伤害吗?我无法想象在后台运行一个简短的位置检查会耗尽电池那么多......但话又说回来,我不知道是什么导致GPS启动并获得可用的信号.

startMonitoringForRegion(geo-fencing):

简而言之,当您进入预定义区域时,您的应用会被唤醒.这是他们的古怪,它是最新的,并且有较少的文档.我无法找到关于"系统如何监控"过境点的良好描述.据我所知,这是一些非常聪明的算法,或者他们不断地对GPS进行ping操作,这会使其效率低于其他方法.

优点:

  • 简单的实施
  • 由系统管理,因此您不必发明自己的临时地理围栏只有在边界跨越时触发...没有不必要的数据只是为了换取电池命中而扔掉
  • 因此,应该是最好的这种事情,准确,由系统管理

缺点:

  • 人们质疑其有效性
  • 关于它是否有利于电池寿命或是否会耗尽电池寿命的巨大冲突.
  • 系统如何监控这个!?
  • 基本上,不确定的行为.

我想我的问题归结为startMonitoringForRegion:与电池寿命,一致性和精确度相比,在后台测试用户位置的其他方法.有没有人彻底测试过这个?或者在他们的应用程序中使用它并获得至少一些反馈?可能,就我的目的而言,权衡是在地理围栏和10分钟更新方法之间.(同样考虑到Apple公开谈论的iOS7会有一些后台任务......这会改变这两种方法之间权衡的微积分吗?)有没有人知道这两者的比较方式?

非常感谢!期待看到我们是否可以深入了解如何比较这些方法.

iphone objective-c core-location cllocationmanager ios

24
推荐指数
1
解决办法
3873
查看次数

Rails教程第11章错误"未初始化的常量User :: Relationships"

我一直在收到错误

   uninitialized constant User::Relationships
Run Code Online (Sandbox Code Playgroud)

在完成rails教程的第11章时.

当我在浏览器中登录时尝试访问主页时出现完整错误.

    Extracted source (around line #11):

8:          </a>
9:          <a href="<%= followers_user_path(@user) %>">
10:         <strong id="followers" class="stat">
11:             <%= @user.followers.count %>
12:         </strong>
13:         followers
14:     </a>
Run Code Online (Sandbox Code Playgroud)

我已多次浏览本章并检查每行代码,但有时候你的眼睛会欺骗你,所以这里是代码的其余部分

users.rb的

class User < ActiveRecord::Base
attr_accessible :email, :name, :password, :password_confirmation
has_secure_password

has_many :microposts, dependent: :destroy 
has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :followed_users, through: :relationships, source: :followed 
has_many :reverse_relationships, foreign_key: "followed_id",
                               class_name: "Relationships",
                               dependent:   :destroy
has_many :followers, through: :reverse_relationships, source: :follower

before_save { |user| user.email = email.downcase} …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails syntax-error railstutorial.org

3
推荐指数
1
解决办法
1327
查看次数

NSDictionary <FBGraphUser>*用户语法说明

在Facebook iOS SDK中,使用以下处理程序返回请求:

 ^(FBRequestConnection *connection, 
       NSDictionary<FBGraphUser> *user, 
       NSError *error) { }
Run Code Online (Sandbox Code Playgroud)

然后可以使用这些调用来访问用户变量......

   self.userNameLabel.text = user.name;
   self.userProfileImage.profileID = user.id;
Run Code Online (Sandbox Code Playgroud)

这种语法有点类似于id <protocolDelegate> object公共属性声明的语法语法,除了NSDictionary是明确的id对象,并且该字典符合协议?但点语法来自何处以及如何声明任意NSFoundation对象与协议相对应而没有对对象本身进行子类化并使其符合?

我做了一些关于点符号和NSDictionary的额外研究,看起来如果没有在NSDictionary中添加类别,就不可能在字典上使用点符号.但是,我没有在Apple文档中看到任何<>语法的引用,表明NSDictionary的这个特定实例符合该表示法.

关于这种包装的工作方式,Facebook文档有点稀疏:

FBGraphUser协议表示Facebook用户对象最常用的属性.它可用于访问已使用FBGraphObject外观包装的NSDictionary对象.

如果跟随这个引导到FBGraphObject文档,那么有一些方法返回符合这个"外观......"的字典,但没有关于如何包装字典的进一步解释.

所以我想我的问题有几点:

  1. 底层代码看起来会使这种语法有效吗?
  2. 它为什么存在?
  3. 为什么facebook会以这种方式实现它,而不是只创建一个可以将数据转换成对象的对象?

任何解释或见解将非常感谢!

objective-c ios facebook-sdk-3.0

3
推荐指数
1
解决办法
3285
查看次数