gpt4 book ai didi

iphone - 如何比较两个 ALAsset?

转载 作者:行者123 更新时间:2023-12-01 17:17:29 24 4
gpt4 key购买 nike

我在比较两个 ALAssets 对象时遇到了一些麻烦。我有两个 NSMutableArray:selectedImages 和 mutableAssets。我在那里存储 ALAssets 对象。但是当我想比较这些 Assets 时,它不适用于 isEqual 或 containsObject 方法,只有当我通过它们的 url 比较它时它才有效:

        ALAsset *asset1 = [self.mutableAssets objectAtIndex:0];
ALAsset *asset2 = [self.selectedImages objectAtIndex:0];

NSLog(@"%@", asset1);
NSLog(@"%@", asset2);

if([self.selectedImages containsObject:[self.mutableAssets objectAtIndex:0]]) {
NSLog(@"the same1");
}
if([asset1 isEqual:asset2]) {
NSLog(@"the sames2");
}
if([asset1.defaultRepresentation.url isEqual:asset2.defaultRepresentation.url]) {
NSLog(@"the same3");
}

只给出这一行:
ALAsset - Type:Photo, URLs:assets-library://asset/asset.JPG?id=E8947286-22E2-42E4-A904-14D940A387B3&ext=JPG
ALAsset - Type:Photo, URLs:assets-library://asset/asset.JPG?id=E8947286-22E2-42E4-A904-14D940A387B3&ext=JPG
the same3

为什么会发生?

最佳答案

似乎 Assets 没有实现 isEqual:
不过,我不会检查 defaultRep 的 URL……两个不同的 Assets 在某种程度上可能具有相同的 defaultRep

我会选择 ALAssetPropertyAssetURL for iOS 6+ALAssetPropertyURLs for ios4&5
--- 你甚至可以把它包装在一个类别中!

@interface ALAsset (isEqual)
- (NSURL*)defaultURL;
@end

@implementation ALAsset (isEqual)

- (NSURL*)defaultURL {
if([[[UIDevice currentDevice] systemVersion] floatValue]>=6.0)
{
return [self valueForKey: ALAssetPropertyAssetURL];
}
else
{
return self.defaultRepresentation.url;
}
}
- (BOOL)isEqual:(id)obj {
if(![obj isKindOfClass:[ALAsset class]])
return NO;

NSURL *u1 = [self defaultURL];
NSURL *u2 = [obj defaultURL];

return ([u1 isEqual:u2]);
}

适用于 iOS 4、5 和 6 及更高版本

关于iphone - 如何比较两个 ALAsset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15340535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com