[英]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.