Если я правильно понял вашу нынешнюю структуру:
@interface Emoji : NSObject
@property (nonatomic, strong) NSString *image; //I'd expect a UIImage there and not an image name
@property (nonatomic, strong) NSArray *codes;
@end
Возможное решение - использовать одну пару значений: imageName / code
@interface Emoji : NSObject
@property (nonatomic, strong) NSString *image; //I'd expect a UIImage there and not an image name
@property (nonatomic, strong) NSString *code;
@end
self.emojis
будет иметь множество объектов Emoji
, которые могут иметь одно и то же имя изображения для другого кода, но преимущество в этом заключается в следующем маленьком приеме:
Сортируйте self.emojis
таким образом, чтобы «меньшие» смайлики были в конце. Таким образом, вы замените сначала только «длинные» и меньшие.
self.emojis = [arrayOfSingleEmojis sortedArrayUsingComparator:^NSComparisonResult(Emoji * _Nonnull emoji1, Emoji * _Nonnull emoji2) {
NSUInteger length1 = [[emoji1 code] length];
NSUInteger length2 = [[emoji2 code] length];
return [@(length2) compare:@(length1)]; //Or reverse length1 & length2, I never know, I always have to test, but I think it's the correct one
}];
Итак, в вашем текущем случае: ]:-)
будет заменен до :-)
, поэтому вы должны иметь <imageFor:">:-)"]
вместо ]<imageFor:":-)>