NSError *error = nil;
NSURL *url = [NSURL URLWithString:[imageLinks objectAtIndex:0]];
NSData *tdata = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error];
if (error) {
NSLog(@"%@", [error localizedDescription]);
}else {
// no error, this one is being called within my app
NSLog(@"Data loaded successfully");
}
self.pictureView1.image = [UIImage imageWithData:tdata];
我有一个jpeg文件,我可以确认URL内容是否已成功收集,但是当我尝试将我的图像数据放入UIImage
我的应用程序失败时。我想知道是否有任何NSData检查确认它可用于UIImage
。
我也不知道导致这种失败的原因,以及如何防止它。任何帮助将不胜感激。
答案 0 :(得分:25)
如上所述in the documentation imageWithData:如果UIImage无法从数据创建图像,则返回nil。在运行时处理此问题的正确方法是在该方法返回nil时提供占位符图像。
至于诊断,首先看一下控制台消息,它们有时会提供有用的信息。如果没有,最好的运气是将NSData转储到磁盘并将结果与存储在服务器上的文件进行比较。您有时会收到损坏的数据,有时您只会收到一条html错误消息,其中包含jpeg二进制数据。
答案 1 :(得分:4)
您可以使用
if ([UIImage imageWithData:yourNSData]) {
// there was an image
}
答案 2 :(得分:2)
对于 Swift 试试这个,
public class Properties{
public string y = "2";
public string x = "4";
}
答案 3 :(得分:0)
试一试......
if ((dataImage != NULL) && ![v isKindOfClass:[NSNull class]])
{
}
除此之外,我的情况没有任何效果。
答案 4 :(得分:0)
如果您要处理单个小图片,可以将Data
转换为UIImage
:
if let _ = UIImage(data: data) {
print("data contains image data")
} else {
print("data does not contain image data")
}
但是如果您处理大量图像或高清图像,您可以在所有文件中使用名为The magic bytes
的文件,即表示文件签名的前几个字节。< / p>
基本上你只需提取几个字节而不是分配整个图像。
以下是使用此技术的Data
扩展程序:
导入基金会
extension Data {
var isImageData: Bool {
let array = self.withUnsafeBytes {
[UInt8](UnsafeBufferPointer(start: $0, count: 10))
}
let intervals: [[UInt8]] = [
[0x42, 0x4D], // bmp
[0xFF, 0xD8, 0xFF], // jpg
[0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A], // png
[0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20], // jpeg2000
[0x49, 0x49, 0x2A, 0x00], // tiff1
[0x4D, 0x4D, 0x00, 0x2A] // tiff2
]
for interval in intervals {
var image = true
for i in 0..<interval.count {
if array[i] != interval[i] {
image = false
break
}
}
if image { return true }
}
return false
}
}
您可以根据代码和文件类型添加更多图像或想象任何文件类型识别(例如see Wikipedia list of file signatures)。
答案 5 :(得分:0)
在Swift 4.2中
self.userImageView.image = UIImage(data: data) != nil ? UIImage(data: data) : UIImage.init(named: "YourDesiredImage")
答案 6 :(得分:-1)
if (tdata !=(NSData *)nil){
NSlog(@"Valid");
}
答案 7 :(得分:-2)
if (tdata !=nil){
NSlog(@"Valid");
}
试试这个,这将检查nsdata是否为空。