我已经使用CocoaPods将GitHub的Mantle项目添加到iOS 6项目中:
$ pod search Mantle
$ vim Podfile // here I added pod 'Mantle'
$ pod install // this installs Mantle 1.0
Run Code Online (Sandbox Code Playgroud)
然后我在自定义搜索路径之前将($inherited)变量添加到Header Search Paths项目的"构建设置"部分.当导入Mantle头文件Xcode抱怨时
#import "Mantle.h" // => 'Mantle/MTLJSONAdapter.h' file not found
Run Code Online (Sandbox Code Playgroud)
我错过了一步吗?我也安装了其他吊舱(AFNetworking和SSKeychain)但只有Mantle给我提出了问题.
我还添加了SSToolkit,但是按照"入门"的说明,即不使用CocoaPods.
我有一个Web服务,它返回一个对象的JSON,并在该对象中有一个其他对象的列表.我怎样才能让Mantle为这些嵌套对象中的每一个创建一个对象,而不是为每个嵌套对象提供一个字典?
作为开发人员,我每天都要处理数据.我需要将原始数据处理到对象(NSManagedObject)的常见问题.所以我使用AFNetworking从远程服务器获取数据,并且由于AFNetworking工作,我有一个可以由NSDictionary表示的数据.因此,需要做大量工作的主要事情是将原始数据转换为具体的数据模型.因此,互联网上有许多图书馆可以为我们做这项艰苦的工作:
MagicalRecord MagicalImport
因此,作为一个新的映射,我想知道哪个库最适合我的目的.也许你也可以建议另一个.
我用coco pod安装了'Mantle'.但是当我尝试在我的模型中使用它时,它就会出现这个错误.
/Users/bgbb/Developer/experimental/MantleTest/MantleTest/TestMTL.h:11:32:找不到'MTLJSONSerializing'的协议声明
#import "MTLModel.h"
@interface TestMTL : MTLModel <MTLJSONSerializing>
@end
Run Code Online (Sandbox Code Playgroud)
这是我的podfile.
platform :ios, '7.0'
pod 'Mantle', '1.1.2'
Run Code Online (Sandbox Code Playgroud)
我不确定我错过了什么.任何线索?
Mantle是否已将JSON中的int值0和1转换为objective-C BOOL值?
我有一个模特:
@interface MyModel : MTLModel
@property (nonatomic, readonly) BOOL isValid;
@end
Run Code Online (Sandbox Code Playgroud)
让我们说JSON是:
{ is_valid: 0 } OR { is_valid: 1 }
Run Code Online (Sandbox Code Playgroud)
我想知道Mantle是否会自动转换is_valid为Objective-C BOOL值,我必须明确提及以下内容:
+ (NSValueTransformer)isValidJSONTransfermer {
return [NSValueTransformer mtl_valueMappingTransformerWithDictionary:@{@(0) : @(NO),
@(1) : @(YES)}];
}
Run Code Online (Sandbox Code Playgroud) 我正在看Overcoat图书馆,我收集的是一个扩展Mantle图书馆的图书馆.
地幔:https://github.com/Mantle/Mantle/ 大衣:https://github.com/gonzalezreal/Overcoat
Mantle和Overcoat github页面一直提到创建Mantle模型,但我想知道如何生成Mantle模型?我是否手动输入或者是否使用Xcode xcdatamodel文件以可视方式构建它,然后生成子类+之后修改该文件?
在Core Data中,使用Interface Builder在xcdatamodel文件中创建实体,然后使用Xcode的Editor> Create NSManagedObject子类.
我们是否为Mantle做同样的事情,然后从NSManagedObject更改为MTLModel?
当我们决定更新xcdatamodel文件中的Core Data实体时会发生什么?如果我们再次重新生成模型文件,我们不是必须将所有这些更改重新添加到NSManagedObject类中吗?
超级混淆了这个过程.
我正在使用Mantle来帮助我将模型对象转换为JSON.我的一个对象包含一个centroid定义如下的属性:
@property (assign) CLLocationCoordinate2D centroid;
当我处理服务器时,我收到以下格式的属性:
centroid: {
lat: "38.416600086777166",
lon: "-88.29868011101323"
}
Run Code Online (Sandbox Code Playgroud)
所以我决定实现MTLJSONSerializing协议中可用的自定义JSON转换器,定义如下:
+ (NSValueTransformer*)centroidJSONTransformer {
return [MTLValueTransformer transformerWithBlock:^CLLocationCoordinate2D(NSDictionary *dict) {
NSNumber *latitude = dict[@"lat"];
NSNumber *longitude = dict[@"lon"];
return CLLocationCoordinate2DMake([latitude doubleValue], [longitude doubleValue]);
}];
}
Run Code Online (Sandbox Code Playgroud)
我遇到的麻烦是+ (instancetype)transformerWithBlock:(MTLValueTransformerBlock)transformationBlock内部的方法MTLValueTransformer接受一个类型的块typedef id (^MTLValueTransformerBlock)(id);,它返回一个类型的值id或任何objective-c指针对象.
但是我要做的是返回CLLocationCoordinate2D类型,它是一个标量非id类型.如果没有定义我自己的客户实现transformerWithBlock:是否有一种干净的方式我可以实现这一点?
objective-c core-location objective-c-blocks nsvaluetransformer github-mantle
我在使用 Mantle 在 Swift 中反序列化和序列化嵌套模型时遇到了很多麻烦。我相信我已经正确设置了所有内容,但我什至无法克服编译错误。为了给出一些观点,我已经成功地转换了没有嵌套模型对象的类。这是我的课:
class TheClass : MTLModel, MTLJSONSerializing
{
var person:Person?
static func JSONKeyPathsByPropertyKey() -> [NSObject : AnyObject]!
{
return ["person" : "person"]
}
static func personJSONTransformer() -> NSValueTransformer!
{
return MTLValueTransformer.reversibleTransformerWithForwardBlock(
{ (person:[NSObject : AnyObject]!) -> AnyObject! in
do
{
return MTLJSONAdapter.modelOfClass(Person.self, fromJSONDictionary: person)
}
catch
{
return Person()
}
},
reverseBlock:
{ (person:Person) -> AnyObject! in
return MTLJSONAdapter.JSONDictionaryFromModel(person)
})
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码无法编译,我也无法编译。这是我收到的错误消息:
Cannot convert return expression of type 'AnyObject!' to expected return type 'Person'
Run Code Online (Sandbox Code Playgroud)
我尝试将反向块的返回类型更改为Person …
前言:我主要是一个obj-c && swift n00b.在过去的一年中,我通过使用RubyMotion对iOS和Cocoa框架有些熟悉.所以,如果有一些愚蠢或明显的东西我会失踪,这就是为什么......
我在新的iOS项目(使用CoreData)中使用Mantle的JSONTransformer时遇到了麻烦.我一直在尝试在Swift中实现以下[obj-c代码]:
+ (NSValueTransformer *)updatedAtJSONTransformer {
return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSString *str) {
return [self.dateFormatter dateFromString:str];
} reverseBlock:^(NSDate *date) {
return [self.dateFormatter stringFromDate:date];
}];
}
Run Code Online (Sandbox Code Playgroud)
我已经dateFormatter定义了以下函数:
func dateFormatter() -> NSDateFormatter {
let _dateFormatter = NSDateFormatter()
_dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
_dateFormatter.dateFormat = "yyyy-MM-dd'T' HH:mm:ss'Z'"
return _dateFormatter
}
Run Code Online (Sandbox Code Playgroud)
使用下面的实现时,我始终收到类似于以下的错误:
'AnyObject!' is not a subtype of 'NSString'
要么
Cannot convert the expression's type 'MTLValueTransformer!' to type 'NSString?'
我尝试过以下方法:
func createdAtJSONTransformer() -> NSValueTransformer {
let _forwardBlock: (String) -> NSDate = …Run Code Online (Sandbox Code Playgroud) 我有一个问题是将核心数据管理对象序列化为JSON对象.我正在使用Mantle这样做,这是相关的NSDate.我收到了这个错误.
'Invalid type in JSON write (__NSDate)'
Run Code Online (Sandbox Code Playgroud)
这就是抛出异常的地方.它是好的,直到代码行4(NSDictionary*jDict ....)
//NSManagedObject from Core Data
Memo *newMemo = [self fetchMemo:memo.uuid];
NSError *errorMantle;
//MTLModel model
BSMemo *memooo = [MTLManagedObjectAdapter modelOfClass:[BSMemo class] fromManagedObject:newMemo error:&errorMantle];
NSDictionary *jDict = [MTLJSONAdapter JSONDictionaryFromModel:memooo];
//Serialising using NSJSONSerialization
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jDict options:NSJSONWritingPrettyPrinted error:&error];
Run Code Online (Sandbox Code Playgroud)
这是怎么了格式化NSDate的MTLModel
+ (NSValueTransformer *)dateJSONTransformer {
static dispatch_once_t onceToken;
static NSDateFormatter *dateFormatter;
dispatch_once(&onceToken, ^{
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"];
});
return [MTLValueTransformer transformerWithBlock:^id(NSString *string) {
return [dateFormatter dateFromString:string];
}]; …Run Code Online (Sandbox Code Playgroud) core-data nsdateformatter ios nsjsonserialization github-mantle
github-mantle ×11
ios ×8
objective-c ×4
cocoapods ×3
core-data ×2
swift ×2
iphone ×1
model ×1
overcoat ×1
xcode6 ×1