ios-iphone-从block中返回整数

问题描述

iphone-从block中返回整数

要从调用的block中返回整数:

-(NSInteger)globalRecord
{
    __block NSInteger globalRecord = 0;

    [GKLeaderboard loadLeaderboardsWithCompletionHandler:^(NSArray *leaderboards, NSError *error) {
        GKLeaderboard *globalTaps = nil;
        for (GKLeaderboard *lb in leaderboards) if ([lb.category isEqualToString:kGlobalLeaderboard]) globalTaps = lb;

        [globalTaps loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
            if ([scores count] != 0)
            {
                GKScore *topScore = [scores objectAtIndex:0];
                globalRecord = topScore.value;
                //42 here
            }

        }];
    }];

    //0 here

    return globalRecord;
}

从游戏中心的排行榜返回最高分,需求是只要接收到分数方法就返回给我,但是没返回成功。

比如在block中最高分是42,但是在block外值就是0。

请高手帮忙解答。

解决方案

要获取globalRecord值应该使用一个回调。

-(void)globalRecord
{
    __block NSInteger globalRecord = 0;

    [GKLeaderboard loadLeaderboardsWithCompletionHandler:^(NSArray *leaderboards, NSError *error) {
        GKLeaderboard *globalTaps = nil;
        for (GKLeaderboard *lb in leaderboards) if ([lb.category isEqualToString:kGlobalLeaderboard]) globalTaps = lb;

        [globalTaps loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
            if ([scores count] != 0)
            {
                GKScore *topScore = [scores objectAtIndex:0];
                globalRecord = topScore.value;
                [self globalRecordRetrieved:globalRecord];
                //42 here
            }

        }];
    }];
}

- (void)globalRecordRetrieved:(NSInteger)record{
    NSLog(@"%d",record); //42 here
}

解决方案二:

请参见我先前的回答,你的问题同  等待AFJSONRequestOperation完成

要解决你的问题,也很简单,需要重新修改一下你的globalRecord方法,改成无返回值的方法

-(void)globalRecordWithBlock:(void(^)(int record))processResult
{
    __block NSInteger globalRecord = 0;

    [GKLeaderboard loadLeaderboardsWithCompletionHandler:^(NSArray *leaderboards, NSError *error) {
        GKLeaderboard *globalTaps = nil;
        for (GKLeaderboard *lb in leaderboards) if ([lb.category isEqualToString:kGlobalLeaderboard]) globalTaps = lb;

        [globalTaps loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
            if ([scores count] != 0)
            {
                GKScore *topScore = [scores objectAtIndex:0];
                globalRecord = topScore.value;
                //42 here
            }
            processResult(globalRecord);  ///将结果回调给调用者
        }];
    }];

}

调用:

[obj globalRecordWithBlock^(int record) {
       NSLog(@"global record is :%d",record);
}];
时间: 2024-08-24 12:03:06

ios-iphone-从block中返回整数的相关文章

JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决_javascript技巧

var date = new Date('2016-11-11 11:11:11'); document.write(date); 最近在写一个时间判断脚本,需要将固定好的字符串时间转换为时间戳进行比较,在做的时候个人习惯使用chrome作为调试工具,代码基本完成之后,一切正常: 使用其他浏览器访问,好嘛,IE跟safari都不兼容,返回错误"Invalid Date". 想着估计是字符串格式的问题,改成'2016/11/11 11:11:11'再测试,结果正常,以为这样应该没问题了,

iOS开发之Block

1.定义 (1) Block是OC中的一种数据类型,在iOS开发中被广泛使用 (2) ^是Block的特有标记 (3) Block的实现代码包含在{}之间 (4) 大多情况下,以内联inline函数的方式被定义和使用 (5) Block与C语言的函数指针有些相似,但使用起来更加灵活 例如: void(^demoBlock)() = ^ {     NSLog(@"demo Block"); }; int(^sumBlock)(int, int) = ^(int x, int y) {

javascript-javaScript中返回true和false的问题,求大神解答!!

问题描述 javaScript中返回true和false的问题,求大神解答!! <%-- Created by IntelliJ IDEA. User: TopbeCoder5 Date: 2015/1/18 Time: 20:44 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" langu

Open Source C# (Mono Compatible) Library for Sending Push Notifications To iOS (iPhone/iPad APNS), Android (C2DM), Windows Phone Apps

下面是一个C#库(兼容Mono),允许你推送通知到iOS应用程序和Android,Windows Phone和一些黑莓应用程序.在iOS和Android开发中给App应用软件推送消息通知是很常用的方式.今天给大家iOS和Android开发者推荐一个可以给实现给包括iOS.Android和Windows Phone及Blackberry多种操作系统的App应用推送消息通知的开源C#库 - PushSharp,同时PushSharp这个C#库可以兼容Mono框架. 这是一些在GitHub的Readm

iOS如何固定导航栏返回按钮大小

问题描述 iOS如何固定导航栏返回按钮大小 原因:系统返回按钮会随着push之前的controller.title的长度而变长,从而影响当前controller的标题位置 前提:必须使用系统导航栏自带的返回按钮,不要重新self.naigationBarItem.leftItem = XXX 解决方案 可以固定push之前的controller.title的字数,假如你的title需要很长,可以自定义一个label直接加到navigationItem.titleView上, 这样不会改变push

iOS 扩展 UINavigationController 出栈返回到先前标记的位置

iOS 扩展 UINavigationController 出栈返回到先前标记的位置 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 这一功能,是突然想到去年看一个 Java 什么数据结构的原码

iOS 在 XCode 6 中的福利:TestFlight

iOS 在 XCode 6 中的福利 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 以下来看看源码版本号和构建版本号的区别: Xcode 中 Target -> General ->

【ios】使用Block对POST异步操作的简单封装

以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3409721.html 一般情况下的POST异步操作需要实现以下几步: 1. 在controller.h上实现<NSURLConnectionDataDelegate>协议 2. 实现协议的几个方法, - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLRespon

【iOS】在Swift中使用JSONModel

这里不讨论JSONModel和Alamofire这两个项目,直接上代码 BaseModel.h #import "JSONModel.h" @interface BaseModel : JSONModel -(instancetype)initWithDictionary:(NSDictionary*)dict; @end BaseModel.m  #import "BaseModel.h" @implementation BaseModel //Make all