私は以下を実装したいと思います:カスタムクラスを用意して(アプリの多くの部分から呼び出し/使用できるように) AFNetworking
、サーバーにリクエストして応答を取得します。クラス内のコードは機能しますが、アプリの他の部分から呼び出すと、null 値が返されます。カスタムクラスのせいだと思います。とにかく、ここに私のコードがあります:
UDIDGen.h
#import <Foundation/NSString.h>
@interface NSString (UDIDGen)
+ (NSString *)getUDID;
@end
UDIDGen.m
#import "UDIDGen.h"
#import "AFHTTPClient.h"
#import "AFHTTPRequestOperation.h"
@implementation NSString (UDIDGen)
+ (NSString *)getUDID{
__strong __block NSString *holder;
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://domain.com/id.php"]];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET"
path:@"http://domain.com/id.php"
parameters:nil];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
holder=[NSString stringWithFormat:@"%@",[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]];
NSLog(@"SERVER RESPONSE: %@",holder);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}];
[operation start];
return holder;
}
@end
そして、アプリの他の部分から呼び出したいときは
#import "UDIDGen.h"
その後
NSString *wsa=[NSString getUDID];
NSLog(@"Response %@",wsa);
何らかの理由NSLog(@"SERVER RESPONSE: %@",holder);
で動作し、サーバーの応答を nslog することができます。しかしNSString *wsa=[NSString getUDID];
、私にヌル値を与えます。カスタムクラスを実装する方法に関係していると思いますが、何か間違っています。何か助けはありますか?
編集:私の作業コードなので、他の人がそれを使用します:
UDIDGen.h
#import <Foundation/NSString.h>
@interface UDIDGen:NSObject{
}
- (void)getUDIDWithCompletion:(void (^)(NSString *udid))completion;
@end
UDIDGen.m
#import "UDIDGen.h"
#import "AFHTTPClient.h"
#import "AFHTTPRequestOperation.h"
@implementation UDIDGen
- (void)getUDIDWithCompletion:(void (^)(NSString *udid))completion {
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://domain.com/id.php"]];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET"
path:@"http://domain.com/id.php"
parameters:nil];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *udid=[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"SERVER RESPONSE: %@",udid);
if (completion)
{
completion(udid);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// TODO: Handle error
}];
[operation start];
}
@end
次のように使用します。
UDIDGen *getResponse = [[UDIDGen alloc] init];
[getResponse getUDIDWithCompletion:^(NSString *udid) {
NSLog(@"SERVER RESPONSE: %@",udid);
}];