小编Ked*_*ape的帖子

在iOS上获取GCM推送通知的注册令牌的正确顺序?GCM不可靠吗?

嗨,我已经按照教程在iOS上使用GCM.它一直在间歇性地工作(这意味着所有的证书,权限和东西都没问题).但是最近,我一直在反复收到两条错误消息:

GCM | GCM registration is not ready with auth credentials.

此外,重新连接到GCM失败:

Error Domain=com.google.gcm Code=501 "(null)"

这部分地与未获得GCM注册ID的设备相关.有没有其他人最近更频繁地遇到这些问题?还是因为我打电话的GCM API不正确的序列(特别是connectWithHandler:,startWithConfig:tokenWithAuthorizedEntity方法)?我怀疑的原因是因为我后面得到一些延迟后,GCM ID.

我也不总是收到GCM ID.当我没有收到一个,我通常需要通过Xcode运行应用程序一次或两次.(或通过强制关闭应用程序).显然,这不是我的用户应该做的事情.

这是我的GCM API调用的序列:

  1. 设备获取APNS令牌
  2. 然后tokenWithAuthorizedEntity:我使用我的APNS令牌进行呼叫
  3. ^这通常会导致上述两个错误之一.
  4. 每当我真正需要GCM令牌时,我会tokenWithAuthorizedEntity再次调用强制重新获取GCM令牌.

另外,我也在connectWithHandler:我的applicationDidBecomeActive:方法中写了调用.

几个问题:

  1. 是调用connectWithHandler:applicationDidBecomeActive:必要的,如果我只接收GCM推送消息感兴趣,不是上游给他们?
  2. 如果对(1)的回答是肯定的,那么在该方法的完成处理程序中,如果发生错误,并且我在那时没有GCM令牌,我是否应该再次尝试获取令牌?(即打电话tokenWithAuthorizedEntity?)
  3. 应该startWithConfig什么时候打电话?在获得GCM令牌之前或之后?

编辑:有限测试显示以下似乎工作:

  1. 首先获取GGLInstance ID(即调用getIDWithHandler:)
  2. 如果收到上述GGLInstance ID且没有任何错误,请求GCM令牌(即通话tokenWithAuthorizedEntity:)
  3. 这样做通常会产生以下错误,但至少在短时间内(~3-10秒),收到令牌:

无法在缓存中找到令牌错误域= com.google.iid代码= -25300"(null)"

cocoa-touch push-notification ios google-cloud-messaging

14
推荐指数
1
解决办法
3405
查看次数

使用AutoLayout调整UIScrollView中的UIView以进行滚动?

我有如下布局(使用AutoLayout,iPad):

Xcode截图

UIScrollView有上,下,前置,后置空间到上海华盈为0.UIView也有四个类似的限制.第二个UILabel以编程方式将其高度设置为0(因为此处显示的屏幕不仅仅是屏幕).此外,这些四个引脚约束也已设置UIViewUIScrollView.

加载XIB时,会UILabel正确显示长行文本.但滚动不起作用.这是iPad上正在运行的应用程序的屏幕截图:

在此输入图像描述

黄色背景设置为最外侧视图,灰色背景设置为最外侧视图UIView.如果你仔细看到屏幕截图的末尾,那么UILabel文字似乎溢出了UIView.

我怀疑因为UIView无法"捕获"它的子视图的大小,所以UIScrollView也无法计算它的内容大小(如果滚动条的内容视图仅等于一个屏幕,则没有理由使其工作).即使这UILabel显然是一个子视图,为什么会发生这种情况UIView呢?如果我的怀疑是正确的,我如何设置UIView的高度等于实际的内容大小,以便我UILabel的正确"包含"在其中?

(UIView静态设置高度,宽度不是一个选项).

注意:在没有UIView和只有一个UILabel(带有长文本)的情况下测试XIB UIScrollView.现在滚动工作(因为,我认为,滚动视图可以计算其内容大小).

NB2:我也在这个SO问题这篇文章中尝试了答案,但我UIView根本不会超出屏幕的尺寸.(我只关心水平滚动)

uiscrollview uiview ios autolayout

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

MediaPlayer:无法在客户端打开文件; 错误(-38,0)等等

我正在学习Android,我创建了一个包含两个按钮的活动:ToggleButton(播放/暂停)和按钮(下一个).按下Next,我有两首想要循环播放的歌曲.我有一个阵列

int [] songs={R.raw.song1,R.raw.song2};

我在我的Activity中覆盖了onClick.第一首歌很好; 但按下Next后,我收到以下错误:

无法在客户端打开文件,尝试服务器端

E/MediaPlayer(3107):在状态4中调用

E/MediaPlayer(3107):错误(-38,0)

E/MediaPlayer(3107):错误(-38,0)

E/MediaPlayer(3107):错误(1,-2147483648)

E/MediaPlayer(3107):错误(1,-2147483648)

在onCreate(Bundle ...)中,

if(mp!=null) mp.release();
  mp=MediaPlayer.create(this, songs[count]);
Run Code Online (Sandbox Code Playgroud)

这是我的onClick(View v)方法:

public void onClick(View view) {    
    Log.v(TAG,"ID:"+view.getId());
    switch (view.getId()) {
    case R.id.playerbutton:  //ToggleButton
        if(state==0) {
            mp.start();
            state=1;
        }
        else if(state==1) {
            state=0;
            mp.pause();
        }   
    break;

    case R.id.next:  //Next button
        Log.v(TAG,"Next button pressed!");
        count=(count+1)%2;  //Have only two songs
        mp.reset();
        try {
            mp.setDataSource(this, Uri.parse("android.resource://com.example.myfirstapp"+songs[count]));
            mp.setOnPreparedListener(this);
            mp.prepareAsync();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) { …
Run Code Online (Sandbox Code Playgroud)

android android-mediaplayer

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

NSFetchedResultsController更新UITableView单元时的一致延迟; 插入即时工作

我有一个UITableView(有自定义单元格,如果重要的话)连接到一个NSFetchedResultsController.我的应用程序也使用推送通知.当远程通知到达时,我分两个阶段更新我的(核心)数据模型:

1)获取标题(带有一些自定义数据)并将其存储为新的核心数据Entity.我在这里打电话NSManagedObjectContext save().NSFetchedResultsController拿起插入并didChangeObjectNSFetchedResultsChangeType=来激活它的委托方法NSFetchedResultsChangeInsert.tableview即时更新.(插入一个新行)

2)通过NSURLSession将其插入上面Entity并再次调用,下载与该单元相关的更多内容save() method.NSFetchedResultsController再次获取更新并didChangeObject使用NSFetchedResultsChangeType= 触发它的委托方法NSFetchedResultsChangeUpdate.这是我称之为configureCell方法的地方.tableView已更新,但具有大约10秒的一致延迟.

在这两个阶段(下载环境保存更新的tableview)需要被显示的数据已经由核心数据持久化.(例如,在我的configureCell..方法中,我知道我没有设置任何细胞标签nil或类似的.

我的NSFetchedResultsController委托方法:

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
[self.mainTableView beginUpdates];
}

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[self.mainTableView endUpdates];
}


- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
UITableView *tableView = self.mainTableView;

switch(type) {

    case NSFetchedResultsChangeInsert: …
Run Code Online (Sandbox Code Playgroud)

core-data objective-c uitableview nsfetchedresultscontroller ios

8
推荐指数
1
解决办法
715
查看次数

UITableViewCell内的程序化Autolayout更改仅在方向更改后更新

我有UITableView自动行高和自定义UITableViewCell.在内部UITableViewCell,我首先添加一些UIButton具有程序性Autolayout约束的s.它们完全按照我的要求定位.然后,在3秒(NSTimer)之后,我删除所有UIButtons并再次添加不同数量的s.(例如,最初我有4个UIButtons,3秒后,我删除那些4 UIButton秒并添加3个不同的.

最初:

原来 3秒后:

3秒后

后旋转:

在此输入图像描述

为什么会这样?我没有看到任何Autolayout警告.此外,在方向更改后,一切都正确定位.什么是需要改变方向?我怎样才能手动强制执行此操作?(仅为此重新加载tableview似乎太多了)

PS:我尝试使用setNeedsUpdateConstraints,layoutIfNeeded,layoutSubviews但无济于事.

这是UITableViewCell代码:http://pastebin.com/TcHUXgDU.(添加了一个不污染这个空间的pastebin)但基本上,configure:我在tableview子类中有一个方法,我在cellForRowAtIndexPath其包含的内容中调用它UITableView.此方法添加了这些约束.此外,在计时器触发后,调用相同的代码(在另一个函数中),除了我添加的项目数与初始项目数不同.

这是我的UITableViewCell布局:(只有顶部,底部,前导,尾随约束已被添加到UIView"Outerview")

uitableviewcell布局

iphone objective-c uitableview ios autolayout

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