繁体   English   中英

如何比较两个ALAsets?

[英]How to compare two ALAssets?

比较两个ALAssets对象有些麻烦。 我有两个NSMutableArray:selectedImages和mutableAssets。 我在那里存储ALAssets对象。 但是,当我想比较此资产时,它不适用于isEqual或containsObject方法,只有当我通过其网址比较它时,它才有效:

        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

为什么会发生?

似乎资产未实现isEqual:

我不会检查defaultRep的URL ...两种不同的资产可能在某种程度上具有相同的defaultRep

我会使用ALAssetPropertyAssetURL for iOS 6+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及更高版本

背景

containsObject:是通过向数组的每个对象发送isEqual:消息(并将anObject作为参数传递给每个isEqual:消息)来确定anObject是否存在于数组中。

isEqual:检查两个对象是否相同。 如果两个对象相等,则它们必须具有相同的hash值。 hash表示哈希表结构中的表地址。


因此,如果没有containsObject也不是isEqual。 如果要对ALAsset覆盖isEqual则得出结果。

NSURL, isEqual是两个NSURL,当且仅当它们返回的baseURL和relativeString值相同时,才视为相等。

if([[[asset1 defaultRepresentation].url absoluteString] isEqualToString:[[asset2 defaultRepresentation].url absoluteString]])
{
}
else
{
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM