我是 iPhone 编程的新手。我在 ClassA 中创建了一个调用 normallogin 的方法。但是如果调用此方法,我将在 ClassB 中调用此方法,它将连接服务器并从 didFinishLoading
中的服务器获取 JSON 数据。 classA 中的方法,我已经存储在新的 JSON 对象中。现在我想在 classB 中获取新的 JSON 对象 new NSDictionary
对象。
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString * returnString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"%@returnStringreturnString", returnString);
NSDictionary *newJSON = [NSJSONSerialization JSONObjectWithData:responseData
options:0
error:nil];
NSLog(@"%@newJSON:---", newJSON);
}
如何在 classB.for 中获取新的 JSON 对象数据,我正在使用下面的代码 我正在使用以下代码在 classB 中调用 normallogin 方法。一切正常。但我想在 ClassB 中获取新的 JSON 数据。请告诉我如何获取数据。
loginconnectiomm *lconnection =[[loginconnectiomm alloc]init];
[lconnection normallogin];
最佳答案
我可以想到 2 种方法来实现您的要求,但可能还有更多。
1) 使用委托(delegate)
将对象 B 设置为对象 A 的委托(delegate)。基本上它是 A 的弱实例变量并且它符合协议(protocol)。因此在您的 ClassA.h 文件中定义(在 ClassA 的接口(interface) block 之前):
@class ClassA; // The interface of ClassA is defined later, so we need to assure that ClassA exists ("forward declaration").
@protocol ClassADelegate <NSObject>
-(void)objectA:(ClassA*)objectA didFinishLoading:(NSDictionary*)dict;
@end
然后您可以按如下方式修改您的代码(我省略了日志):
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString * returnString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSDictionary *newJSON = [NSJSONSerialization JSONObjectWithData:responseData
options:0
error:nil];
if ([self.delegate respondsToSelector:@selector(objectA:didFinishLoading:)])
{
[self.delegate objectA:self didFinishLoading:newJSON];
}
}
2) 使用 block
您可以传入在 connectionDidFinishLoading:
中执行的代码块。因此在 ClassA 中为 block 定义一个属性:
@property (nonatomic, copy) void(^didFinishLoadingHandler)(NSDictionary*);
添加
self.didFinishLoadingHandler(newJSON);
self.didFinishLoadingHandler = nil;
到 didFinishLoading
的底部。这将执行 block 并重置属性。
在 normallogin
中,将传入的 block 存储在属性中。在 ObjectB 中执行如下操作:
__block NSDictionary* jsonDict = nil;
loginconnectiomm *lconnection =[[loginconnectiomm alloc]init];
[lconnection normallogin:^(NSDictionary* json){
jsonDict = json;
}];
更新
将 -(void)normallogin;
的声明更改为 -(void)normallogin:(void(^)(NSDictionary*))didFinishLoadingHandler;
。然后在实现中做类似的事情
-(void)normallogin:(void(^)(NSDictionary*))didFinishLoadingHandler
{
self.didFinishLoadingHandler = didFinishLoadingHandler;
// Rest of the stuff from your normallogin
// ...
}
关于ios - 如何在ios中的另一个类中获取NSDictionary JSON数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23752360/