我有一个无序的JSON项目数组.根据规范http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.5,下面的json模式将仅验证数组中的对象是否显示为IN THAT ORDER.我不想指定一个订单,只需验证数组中的对象,无论对象的顺序或数量如何.从规范我似乎无法理解这是如何做到的.
"transactions" : {
"type" : "array",
"items" : [
{
"type" : "object",
"properties" : {
"type" : {
"type" : "string",
"enum" : ["BUILD", "REASSIGN"]
}
}
},
{
"type" : "object",
"properties" : {
"type" : {
"type" : "string",
"enum" : ["BREAK"]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud) 我发现在图像显示网站上的数据时使用CouchDB附件非常有用.但是,当我将数据库复制到移动环境时,运行视图然后必须遍历文档以访问其附件是非常低效的.在iOS/Android平台似乎很多更有效地存储数据定期BLOB和有只有一个视图的查询,发出摆在首位的所有文档数据视图的查询访问所有的二进制数据.有没有办法在我的map函数中读取附件DATA,并将其包含在emit语句中.我看到有通过_attachments提供的附件信息,但这不提供对数据的访问.
更新 的主要缺点(在接受的答案不详述)使用BLOB的文件本身,而不是在附件是,当您更新文档,你必须得到整个文档,然后将它张贴回来.如果您不使用附件,则必须获取所有二进制数据,而不是附件.如果您要对文档执行更新,使用附件实际上是设计二进制数据的唯一合理方法.
我有一个视图控制器,我在其中创建一个NSFetchedResultsController以在TableView中显示一组CoreData对象.在tableview中查看这些对象时,可以通过调用RestKit getObjectsAtPath来更新它们,它通过响应描述符和RKEntityMapping正确处理,以更新CoreData对象上的字段.但是,此特定实体还具有自定义派生字段 - 实际上是状态机(基于TransitionKit),它读取提供给实体的状态值,并使用服务器提供的状态重新初始化状态机.但是,无论我在哪里重新初始化状态机(awakeFromFetch,willSave,键值观察),当NSFetchedResultsController中的对象副本用于更新相应的表格单元格时(NSFetchResultsController为)时,不会更新此重新初始化状态机.通知该行的变化).要清楚 - 通过RestKit EntityMapping IS更新的值已更新,但状态机(派生值)未更新.这是为什么?
不应该以允许它们计算派生值的方式通知NSFetchedResultsController的对象数组吗?当我在代码中跟踪时,主线程中的awakeFromFetch还没有包含更新的值,并且在willSave或setter中计算我的派生值似乎不会在NSFetchedResultsController持有的对象的实例中创建此派生值.
我已附上我的基本型号代码
#import "VCStateMachineManagedObject.h"
@interface VCStateMachineManagedObject ()
@property (nonatomic, strong) TKStateMachine * stateMachine;
@end
@implementation VCStateMachineManagedObject
@dynamic savedState;
@synthesize stateMachine = _stateMachine;
@synthesize forcedState;
-(id)init {
self = [super init];
if(self != nil) {
}
return self;
}
- (BOOL)canFireEvent:(id)eventOrEventName {
return [_stateMachine canFireEvent:eventOrEventName];
}
- (BOOL)fireEvent:(id)eventOrEventName userInfo:(NSDictionary *)userInfo error:(NSError **)error{
return [_stateMachine fireEvent:eventOrEventName userInfo:userInfo error:error];
}
- (void) assignStatesAndEvents:(TKStateMachine *) stateMachine {
[NSException raise:@"Invoked abstract method" format:@"Invoked abstract method"];
}
- …Run Code Online (Sandbox Code Playgroud) 我设置了以下获取请求块来处理孤立对象的删除:
[objectManager addFetchRequestBlock:^NSFetchRequest *(NSURL *URL) {
RKPathMatcher *pathMatcher = [RKPathMatcher pathMatcherWithPattern:API_GET_ACTIVE_RIDES];
NSString * relativePath = [URL relativePath];
NSDictionary *argsDict = nil;
BOOL match = [pathMatcher matchesPath:relativePath tokenizeQueryStrings:NO parsedArguments:&argsDict];
if (match) {
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Ride"];
return fetchRequest;
}
return nil;
}];
Run Code Online (Sandbox Code Playgroud)
由于我需要允许用户注销并重新登录,因此我使用以下内容清除核心数据中的所有数据:
+ (void) clearUserData {
NSError * error = nil;
[[RKManagedObjectStore defaultStore] resetPersistentStores:&error];
if(error != nil){
[WRUtilities criticalError:error];
return;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我注销并重新登录到我的应用程序,则第一次登录时加载的对象不会从服务器加载.使用RestKit日志记录,我可以看到请求熄灭并从服务器返回正确的数据,但映射似乎完全被跳过,导致没有对象(重新)插入到核心数据中.
如果我删除了我的获取请求块,一切都按照我的预期工作 - clearUserData删除所有数据,并上传登录数据从服务器重新查询并重新加载到核心数据.
我的问题是双重的.我需要更改什么才能获得成功重新加载数据的预期行为,为什么获取请求块(我理解为仅用于删除孤立对象)会对此方案产生影响?
我之前看过这个并且刚刚删除了获取请求块,但我更喜欢使用此功能而不是因为这个问题而跳过它.
在下面的代码中,返回时,NSError在XCode中显示类型为"HomeViewController" - 我的一个视图控制器.如果我用双指针做了一些与众不同的事情,这是有道理的,但我没有.为什么会这样?我的代码中是否存在一些愚蠢的错误,核心数据中的错误或????
希望我不是自欺欺人!
self->ctx = [(AppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext];
NSFetchRequest * request = [[NSFetchRequest alloc] init];
NSEntityDescription *entityDescription = [NSEntityDescription
entityForName:@"Street" inManagedObjectContext:self->ctx];
NSSortDescriptor* sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"street" ascending:YES];
NSArray* sortDescriptors = [[NSArray alloc] initWithObjects: sortDescriptor, nil];
[request setEntity:entityDescription];
[request setSortDescriptors:sortDescriptors];
NSError * error;
NSArray *array = [self->ctx executeFetchRequest:request error:&error];
if(error!=nil){
NSLog(@"%@", @"Critical model error search");
}
_streets = array;
Run Code Online (Sandbox Code Playgroud) ios ×2
objective-c ×2
restkit ×2
core-data ×1
couchdb ×1
json ×1
jsonschema ×1
mobile ×1
validation ×1
xcode ×1