繁体   English   中英

块编程iOS Objective c

[英]Block programming iOS Objective c

我有以下代码用于从“首选项”中检索整数。 我做了一堂同样的课。 代码如下

PreferenceHelper.h

#import <Foundation/Foundation.h>

@interface PreferenceHelper : NSObject
+ (id) sharedHelper;
- (int) getInt:(NSString *)key;
@end

PreferenceHelper.m

#import "PreferenceHelper.h"

@implementation PreferenceHelper
+ (id)sharedHelper {
    static PreferenceHelper *sharedMyHelper = nil;
    @synchronized(self) {
        if (sharedMyHelper == nil)
            sharedMyHelper = [[self alloc] init];
    }
    return sharedMyHelper;
}
- (int) getInt:(NSString *)key{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    NSInteger value = 0;
    if ([prefs valueForKey:key] == nil||key==nil) {
        value = 0;
        return 0;
    }
    else{
        value = [prefs integerForKey:key];
    }
    return (int)value;
}

现在,我试图在目标c的回调块内调用getInt,如下所示

-(void)getFacebookDetails{
    __block int parseScore = 0;
    [FBRequestConnection startWithGraphPath:@"me/scores"
                          completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                              if (!error){
                                  parseScore = [[PreferenceHelper sharedHelper] getInt:@"highscore"];
                                  NSLog(@"%d",parseScore);
                              } else {
                                  NSLog(@"failed");
                              }
                          }];
}

当我使用调试器进入getInt时,传递的键值@“ highscore”丢失了它的值,结果parseScore返回的是某个垃圾int值。 有人知道原因吗?

定义一个块

 typedef void (^onListLoadCompleted)(NSString *strScore);

方法调用

[self getFacebookDetails:^(NSString *strScore) {
    NSLog(@"%@",strScore);
}];

块功能

    -(void)getFacebookDetails:(onListLoadCompleted)block{

    __block int parseScore = 0;
    [FBRequestConnection startWithGraphPath:@"me/scores"
                          completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                              if (!error){
                                  parseScore = [[PreferenceHelper sharedHelper] getInt:@"highscore"];
                                  NSLog(@"%d",parseScore);
                                  block(parseScore);
                              } else {
                                  NSLog(@"failed");
                                  block(@"failed");

                              }
                          }];

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM