自定义表格视图单元格中的 JSON 缩略图图像

Posted

技术标签:

【中文标题】自定义表格视图单元格中的 JSON 缩略图图像【英文标题】:JSON Thumbnail image in Custom Table View Cell 【发布时间】:2015-04-08 16:29:49 【问题描述】:

我真的厌倦了试图解决这个问题,所以我想我需要一些帮助。我正在从我成功解析的 API 填充我的 ios 的每个单元格(可以毫无问题地检索文本或数字等简单的东西) 但是当我尝试为缩略图设置图像时,我遇到了一些错误。

这是我的代码:

NSString *imageUrl = [tempDictionary valueForKeyPath:@"files.url_thumb"];
NSURL *url = [NSURL URLWithString:imageUrl];
NSData *imageData = [NSData dataWithContentsOfURL:url];
UIImage *thumbNailImage = [UIImage imageWithData:imageData];

dispatch_async(dispatch_get_main_queue(), ^


    [cell.ThumbImage setImage:thumbNailImage];
);

这是我控制台中的噩梦:

2015-04-08 13:14:26.450 WebTableView[4976:173380] -[__NSArrayI length]: 

unrecognized selector sent to instance 0x79e18b90
2015-04-08 13:14:26.509 WebTableView[4976:173380] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI length]: unrecognized selector sent to instance 0x79e18b90'
*** First throw call stack:
(
    0   CoreFoundation                      0x036c9466 __exceptionPreprocess + 182
    1   libobjc.A.dylib                     0x03352a97 objc_exception_throw + 44
    2   CoreFoundation                      0x036d12c5 -[NSObject(NSObject) doesNotRecognizeSelector:] + 277
    3   CoreFoundation                      0x03619bc7 ___forwarding___ + 1047
    4   CoreFoundation                      0x0361978e _CF_forwarding_prep_0 + 14
    5   CoreFoundation                      0x035836cf CFStringGetLength + 143
    6   CoreFoundation                      0x036a9c8d _CFURLCreateWithURLString + 77
    7   CoreFoundation                      0x035952d3 CFURLCreateWithString + 35
    8   Foundation                          0x02f17999 -[NSURL(NSURL) initWithString:relativeToURL:] + 371
    9   Foundation                          0x02f17807 +[NSURL(NSURL) URLWithString:relativeToURL:] + 80
    10  Foundation                          0x02f177b1 +[NSURL(NSURL) URLWithString:] + 48
    11  WebTableView                        0x00111a8b -[TableViewController tableView:cellForRowAtIndexPath:] + 571
    12  UIKit                               0x01c26c9c -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 473
    13  UIKit                               0x01c26d7e -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 77
    14  UIKit                               0x01c0054b -[UITableView _updateVisibleCellsNow:isRecursive:] + 3034
    15  UIKit                               0x01c1aeb1 -[UITableView layoutSubviews] + 222
    16  UIKit                               0x01b907b1 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 608
    17  libobjc.A.dylib                     0x03368771 -[NSObject performSelector:withObject:] + 70
    18  QuartzCore                          0x009421cf -[CALayer layoutSublayers] + 152
    19  QuartzCore                          0x00936055 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 397
    20  QuartzCore                          0x00935eb0 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 26
    21  QuartzCore                          0x008941b6 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 284
    22  QuartzCore                          0x0089558a _ZN2CA11Transaction6commitEv + 392
    23  QuartzCore                          0x00895c56 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 92
    24  CoreFoundation                      0x035ec18e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
    25  CoreFoundation                      0x035ec0d0 __CFRunLoopDoObservers + 400
    26  CoreFoundation                      0x035e1b0a __CFRunLoopRun + 1226
    27  CoreFoundation                      0x035e137b CFRunLoopRunSpecific + 443
    28  CoreFoundation                      0x035e11ab CFRunLoopRunInMode + 123
    29  GraphicsServices                    0x04b3d2c1 GSEventRunModal + 192
    30  GraphicsServices                    0x04b3d0fe GSEventRun + 104
    31  UIKit                               0x01b049b6 UIApplicationMain + 1526
    32  WebTableView                        0x000dd6cd main + 141
    33  libdyld.dylib                       0x03e94ac9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

【问题讨论】:

我想在这里得到一些帮助 cell.ThumbImage 是 UIImageView 吗?试试这个 - [cell.ThumbImage.image setImage:thumbNailImage]; 感谢您的回复@UttamSinha,我试过了......但让我失败了。 "'UImage' 没有可见界面声明了 'setImage:' 的选择器" 你得到的 imageUrl 是什么? @UttamSinha 我正在尝试获取“url_thumb”,这是一个图像,它位于“文件”"expenses_price" = 0; files = ( "date_modified" = "<null>"; entity = ad; "entity_id" = 1; file = 1; id = 1; target = main; type = 1; "url_thumb" = "http://dev.geoplem.com/images/pub/tn/538928ed35fde138844865.jpg"; ); latitude = "-34.57496820";【参考方案1】:

我认为 valueForKeyPath: 返回一个对象数组。尝试记录 imageUrl 并检查你得到了什么。

如果你确信只有一个 url,那么你可以试试这个 -

NSString *imageUrl = [[tempDictionary valueForKeyPath:@"files.url_thumb"] lastObject];

其他尝试类似的方法 -

valueForKey:@"files"] valueForKey:@"url_thumb]

【讨论】:

感谢您的回复。我选择了第二个选项,因为我使用的是 url 图像列表。我得到了同样的错误:libc++abi.dylib: terminating with uncaught exception of type NSException 这比我想象的要复杂。 您记录了 imageUrl 吗? NSLog("%@", imageUrl);检查您是否在此处获取 url 或应用程序在此时终止。使用断点检查崩溃的流。 它在这里崩溃: NSURL *url = [NSURL URLWithString:imageUrl]; "信号 SIGABRT 线程:1" 崩溃报告说的一样吗?之前是由于 [__NSArrayI 长度],现在控制台日志是什么?另外,我只是在它要求身份验证用户名和密码的浏览器中点击图像 url。 这是现在的控制台日志:pastie.org/10088792 它受用户名和密码的保护,这些用户名和密码已经有了并且可以正常工作,我从 json 中得到了很好的文本。现在,这些图像让我头疼。我想指出,在我可以在每个单元格中获得一个简单的图像(重复)之前进行了一些尝试,但由于不是我想要做的,我编辑了代码以在每个单元格中都有每个相应的图像。再次感谢您

以上是关于自定义表格视图单元格中的 JSON 缩略图图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在表格视图单元格中快速自定义和实现滑块

图像不适合自定义表格视图单元格中的图像视图

IOS/Objective-C:检测自定义表格视图单元格中的按钮按下?

如何使用分页更改 tableview 自定义单元格中的 imageview 图像。

如何在 cellforrowatindexpath 之后更新自定义表格单元格中的 UIButton 图像?

无法在自定义表格视图单元格中使 ImageView 成为一个圆圈