作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基于块的枚举设置来遍历这样的 NSDictionaries 数组:
__block NSURL *contentURL;
//This method of enumerating over the array gives the bad_access error
[documents enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSString *aName = [(NSDictionary *)obj objectForKey:@"Name"];
if([aName isEqualToString:name]) {
contentURL = [NSURL URLWithString:[(NSDictionary *)obj objectForKey:@"Content"]];
*stop=YES;
}
}];
NSLog(@"Content URL for issue with name %@ is %@", name, contentURL);
contentURL
上收到 EXC_BAD_ACCESS 错误当我尝试在 NSLog 语句中打印出来时。
NSURL *contentURL;
//This method of enumerating over the array works fine
for (NSDictionary *obj in documents) {
NSString *aName = [obj objectForKey:@"Name"];
if([aName isEqualToString:name]) {
contentURL = [NSURL URLWithString:[obj objectForKey:@"Content"]];
}
}
NSLog(@"Content URL for issue with name %@ is %@", name, contentURL);
最佳答案
不久前我遇到了类似的问题。
事实证明,一些基于块的枚举方法将枚举包装在自动释放池中。由于您正在分配一个自动释放的对象,它会在 -enumerateObjectsUsingBlock:
之前被释放返回。
(我遇到了 -[NSDictionary enumerateKeysAndObjectsUsingBlock:
的问题,但同样的原则在这里适用)
试试这个:
contentURL = [[NSURL alloc] initWithString:[(NSDictionary *)obj objectForKey:@"Content"];
-retain
在任务中。
关于objective-c - 基于 block 的枚举获取 BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17797334/
我是一名优秀的程序员,十分优秀!