- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 Core Data NSValueTransformer
将 NSArray
转换为 NSString
。不知道能不能存档,但是看到apple的官方文档有一段代码:
@interface ClassNameTransformer: NSValueTransformer {}
@end
@implementation ClassNameTransformer
+ (Class)transformedValueClass { return [NSString class]; }
+ (BOOL)allowsReverseTransformation { return NO; }
- (id)transformedValue:(id)value {
return (value == nil) ? nil : NSStringFromClass([value class]);
}
@end
它似乎可以将数据存储到 NSString
中(也许我误解了..),所以我尝试如下:
@implementation ArrayToStringTransformer
+ (BOOL)allowsReverseTransformation {
return YES;
}
+ (Class)transformedValueClass {
return [NSString class];
}
- (id)transformedValue:(id)value {
// return NSStringFromClass([value class]);
// return NSStringFromClass([@"11" class]);
NSLog(@"!!!!!! %@, %@", NSStringFromClass([value class]), value);
if ([value isKindOfClass:[NSString class]])
return NSStringFromClass([value class]);
NSMutableString * string = [NSMutableString string];
for (NSNumber * number in value)
[string appendString:[NSString stringWithFormat:@"%@,", number]];
return string;
}
- (id)reverseTransformedValue:(id)value {
NSArray * array = [value componentsSeparatedByString:@","];
return array;
}
@end
但是,它因以下错误而崩溃(它包括 NSLog):
[26364:11903] !!!!!! __NSCFString, 0,0
[26364:11903] -[__NSCFString bytes]: unrecognized selector sent to instance 0x905f620
[26364:11903] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString bytes]: unrecognized selector sent to instance 0x905f620'
有什么想法吗?请!!
嗯,我只是将NSArray
转为NSData
,如果是NSString
类型,就转为NSArray
> 首先,然后是 NSData
,它起作用了:
+ (Class)transformedValueClass {
return [NSArray class];
}
- (id)transformedValue:(id)value {
if (! [value isKindOfClass:[NSString class]])
return [NSKeyedArchiver archivedDataWithRootObject:value];
NSLog(@"!!! Convert NSString to NSArray");
NSArray * array = [value componentsSeparatedByString:@","];
NSData * data = [NSKeyedArchiver archivedDataWithRootObject:array];
return data;
}
- (id)reverseTransformedValue:(id)value {
return [NSKeyedUnarchiver unarchiveObjectWithData:value];
}
但我想知道这是否是一种正确的方法?如您所见,我在transformedValueClass
方法中返回了[NSArray class]
,但实际上在transformedValue:<中返回了
.NSData
类型的数据值:/
苹果文档说:
An NSData object containing the encoded form of the object graph whose root object is rootObject
我完全糊涂了...
最佳答案
目前Core Data只能转NSData。默认转换器可以通过将属性类型设置为可转换来处理将字符串数组转换为 NSData,这是唯一需要的配置。
我个人希望 Core Data 将来允许转换为字符串,例如,当使用 SQLite 浏览器时,记录字段是人类可读的,而不是二进制 plist。
他们可能没有包含此功能的一个理论是,如果您尝试包含一个字符串数组,那么您可能最好使用多对多关系来实现您要存储的内容.
关于iphone - 通过 NSValueTransformer 将字符串转换为核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9344189/
当尝试在 Core Data 中使用系统提供的 NSValueTransformer 时,我收到以下警告: Warning: no NSValueTransformer with class name
我正在使用 NSValueTransformer类来转换 NSDictionary对象到自定义对象。 我已经使用以下方法实现了子类: + (Class)transformedValueClass +
样本iPhoneCoreDataRecipes , UIImage可以通过核心数据技术保存到数据库。 NSValueTransformer 用于从 UIImage 到 NSData 的转换,反之亦然。
我正在尝试使用 Core Data 和 CommonCrypto 加密数据。我正在尝试使用 NSValueTransformer 来延迟加密和解密。 但是,当我现在尝试将加密数据保存到持久性存储协调器
我的共享用户默认 plist 看起来像这样: menuItems (Array) Item 0 (Dictionary) name (String) "Menu Item 0" s
我无法在我的 ManagedObjectContext 上调用 save:(NSErrro **) 时调用我的 NSValueTransformer 实现。 我已经尝试通过自己的 ManagedObj
我正在尝试使用 Core Data NSValueTransformer 将 NSArray 转换为 NSString。不知道能不能存档,但是看到apple的官方文档有一段代码: @interface
我有一个具有相当简单数据模型的 Core Data 应用程序。我希望能够将 NSImage 的实例作为 PNG Bitmap NSData 对象存储在持久存储中,以节省空间。 为此,我编写了一个简单的
我想进行一些绑定(bind),根据文本字段中的单个数值来切换弹出菜单中的项目标题。让我解释一下: 这是我的用户界面: 我希望我的菜单项根据文本字段中的数字自动调整为单数或复数。例如,当我在框中输入“1
我有一个表列,我将其绑定(bind)到 NSArrayController 中的值。我想做的是仅显示数组 Controller 中实际值的子字符串。到目前为止,我一直试图做到这一点的方法是创建一个 N
具体来说,假设我有一个 NSManagedObject,其“statusCode”属性设置为可转换,并且有一个可逆值转换器子类,可以从 NSStrings 转换为 NSNumbers,反之亦然。这个想
我试图根据核心数据中的枚举值来显示 NSImage。我在绑定(bind)到我所使用的值的 NSImageCell 上使用值转换器选择要显示的图像。 它工作完美并且符合预期,不幸的是,当使用 NSVal
这是我对 NSValueTransformer 的实现 + (Class)transformedValueClass { return [NSData class]; } + (BOOL)al
我想制作一个带有预定值列表的NSComboBox。底层对象是自定义 Swift 结构,我使用自定义 NSValueTransformer 将这些对象与我存储的底层字符串表示形式进行相互转换。 我想限制
我正在使用 NSValueTranformer 来加密某些核心数据属性。这一切都很好,除了我需要能够根据 NSManagedObject 使用不同的加密 key 。无论如何我可以从我的转换器类中访问这
如果您扩展 NSManagedObject 或使用静态方法实例化您的 Model 类或将 NSPersistentStoreCoordinator 类型设置为 NSInMemoryStoreType
我正在尝试将从 iPhone 相机拍摄的照片保存到核心数据。 我有从相机拍摄的 UIImage。之后,我不知道我应该做什么。 每张图片都与一个问题实体相关联。现在问题实体没有图像字段。它与图像实体有关
我试图将实体放入核心数据存储中,每个实体都具有非标准数据类型——一个是 NSDocument,另一个是 NSURL。我在 .xcdatamodeld 中得到它,我需要将它们声明为 Transforma
在我的 Core Data 模式中,我在实体中有一个“可转换”属性,它使用 NSValueTransformer,其目的是通过一些压缩将 UIImage 转换为 NSData。从这个属性,我最近开始收
我正在使用自定义 NSValueTransformer 将颜色信息存储在我的核心数据存储中。一旦颜色数据已经存储在存储中(即一旦应用程序已经运行并退出一次),Transformable 数据和 UIC
我是一名优秀的程序员,十分优秀!