我写了一个NSDictionary类别。 Category有一个方法调用“initWithJSONURL”。 代码如下:
- (id)initWithJSONURL:(NSURL *)url
{
self = [super init];
if (self) {
NSError *error;
NSData *data = [NSData dataWithContentsOfURL:url
options:NSUTF8StringEncoding
error:&error];
if (!data) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"connection failed"
message:[error localizedDescription]
delegate:self
cancelButtonTitle:@"cancel"
otherButtonTitles:nil];
[alert show];
} else {
self = [NSJSONSerialization JSONObjectWithData:data
options:0
error:&error];
if (error) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"invalid data"
message:[error localizedDescription]
delegate:self
cancelButtonTitle:@"cancel"
otherButtonTitles:nil];
[alert show];
}
}
}
return self;
}
这里是我的ViewController viewDidLoad
中的代码NSURL *url = [NSURL URLWithString:@"http://localhost:8888/json.php"];
NSDictionary *dict = [[NSDictionary alloc] initWithJSONURL:url];
NSLog(@"%@", dict);
如果我使用正确的网址,一切都很完美。 但如果URL不正确,应用程序崩溃。 我不知道为什么,它不应该崩溃,它应该显示警报视图。 游戏机显示:
erminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSDictionary count]: method sent to an uninitialized immutable dictionary object'
我希望有人可以帮助我,并为我糟糕的英语道歉。
答案 0 :(得分:3)
您想拨打[self init]
而不是[super init]
。类别不是子类,因此[super init]
表示[NSObject init]
。永远不会调用NSDictionary
的指定初始化程序,并且内部字典结构保持单一化。