我试图将JSON信息动态映射到不同的对象.但是我无法弄清楚如何控制整个指针的情况,因为我希望它可以工作.
到目前为止,我的方法是为每个对象创建一个字典,将变量指针映射到等效的JSON键.在我的JSON映射器中,我有一个方法,parseJSONFromDictionary:withObject它应该迭代SBJSON的JSONValue 返回的字典,并将适当的值分配给给定对象中的相应变量.
-(NSObject *)parseJSONFromDictionary:(NSDictionary *)dict withObject:(NSObject *)start{
for (NSString *key in dict) {
if ([[self.mappings objectForKey:key] isMemberOfClass:[NSString class]]) {
start.[self.mappings objectForKey:key] = [[dict valueForKey:key] stringValue];
}
}
return start;
}Run Code Online (Sandbox Code Playgroud)
mappings是包含变量和json键的字典,它dict是从json解析器返回的内容.
最大的问题是我做不到start.[self.mappings objectForKey:key].我对C知之甚少,显然我对指针知之甚少,那么我将如何创建这种系统呢?我知道这不是正确的方法,但正确的方法是什么?我知道它可以完成,正如RestKit所做的那样,但它们不支持OAuth,所以我很遗憾不能使用它们可爱的框架.
我之所以走这条路是因为我正在使用的API目前处于alpha阶段.我希望能够轻松适应任何未来的变化,而无需重写许多代码行.我也想开始编程DRY-ly.我知道JSON解析非常重复,我想找到一种方法来减少开销.
感谢您的帮助!
编辑:似乎对我要问的内容存在一些困惑.我并不需要帮助解析JSON.我已经在使用SBJSON了.我也不需要别人帮助的请求,我已经使用JDG的OAuthConsumer框架.我只能使用支持OAuth 2.0的框架.
我确实需要帮助弄清楚如何防止这种情况:
-(Class1 *)parseJsonForClass1:(NSString *)inputString {
NSDictionary *outputDict = [inputString JSONValue];
Class1 *instance1 = [self mapObjectsForClass1From:outputDict]; …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的数据库中添加一个新条目,但它不起作用.没有抛出错误,并且应该在插入运行后执行的代码,这意味着查询没有错误.但是,数据库中没有添加任何内容.我已经尝试了两个预处理语句和更简单的sqlite3_exec,结果相同.
我知道我的数据库正在加载,因为tableview(和后续的tableviews)的信息是从数据库加载的.连接不是问题.
此外,sqlite3_last_insert_rowid(db)的日志返回下一行的正确数字.但是,信息仍未保存.
这是我的代码:
db = [Database openDatabase];
NSString *query = [NSString stringWithFormat:@"INSERT INTO lists (name) VALUES('%@')", newField.text];
NSLog(@"Query: %@",query);
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(db, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
if (sqlite3_step(statement) == SQLITE_DONE){
NSLog(@"You created a new list!");
int newListId = sqlite3_last_insert_rowid(db);
MyList *newList = [[MyList alloc] initWithName:newField.text idNumber:[NSNumber numberWithInt:newListId]];
[self.listArray addObject:newList];
[newList release];
[self.tableView reloadData];
sqlite3_finalize(statement);
}
else {
NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(db));
}
}
[Database closeDatabase:db];
Run Code Online (Sandbox Code Playgroud)
同样,没有抛出任何错误.prepare和step语句分别返回SQLITE_OK和SQLITE_DONE,但没有任何反应.
任何帮助表示赞赏!
由于某种原因,所有NSString类型的属性都在我的Article对象中作为NSArrays返回.这是我检索它们的功能:
- (NSArray *)getSavedArticles
{
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
NSError *error = nil;
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Article" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
NSSortDescriptor *dateSort = [NSSortDescriptor sortDescriptorWithKey:@"last_opened" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:dateSort]];
NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
return fetchedObjects;
}Run Code Online (Sandbox Code Playgroud)
我没有为这些创建NSManagedObjectModel,而是我只是使用KVO访问它们.
//self.data has the array returned from getSavedArticles
NSManagedObject *object = [self.data objectAtIndex:indexPath.row];
NSString *path = [object valueForKey:@"path"];
NSString* id = [object valueForKey:@"id"];
Run Code Online (Sandbox Code Playgroud)
当我在变量窗格中查看此内容时path,id我看到(__NSArrayI *) ... Variable is not a CFString. …
我正在尝试设置git instaweb为在Chrome中打开。我已经设置了默认的浏览器,如下所示:
git config --global web.browser chrome
Run Code Online (Sandbox Code Playgroud)
这种变化反映在我的global上.gitconfig,并且git-web--browse文档说chrome可作为一种传递的东西来使用。
当我运行时git instaweb,我得到的是:
The browser chrome is not available as 'chrome'.
http://127.0.0.1:1234
Run Code Online (Sandbox Code Playgroud)
我也尝试过,google-chrome并且发生相同的结果。如何设置网络浏览器以chrome实际打开?
运行OSX 10.8.2
我有一堆UICollectionViewCells包含按钮.出于某种原因,当按钮位于按钮内时,我的信号拒绝触发UICollectionViewCell.切换到正常addTarget:action:forControlEvents:将起作用,但不是RAC信号.我在2个不同的集合视图和2个不同的自定义集合单元中发生了这种情况.
我所做的只是:
[[cell.button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
// code to be executed here, which doesn't happen
}];
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
不幸的是,对于那些有类似问题的人来说,赏金被授予了一个无法解决这个问题的答案.
我有一个带图像上传的表单(heroku到s3).当我提交表单时,我的rails服务器会在向用户返回响应之前等待上传图像的后台作业.这会导致每次上传图像时应用程序超时.
目前的活动顺序:
所需的活动顺序:
上传代码
class PhotoUploader < CarrierWave::Uploader::Base
include ::CarrierWave::Backgrounder::Delay
include CarrierWave::MimeTypes
process :set_content_type
storage :fog
end
Run Code Online (Sandbox Code Playgroud)
Carrierwave :: Backgrounder初始化程序
CarrierWave::Backgrounder.configure do |c|
c.backend :sidekiq, queue: :carrierwave
end
Run Code Online (Sandbox Code Playgroud)
用户模型
class User < ActiveRecord::Base
mount_uploader :photo, PhotoUploader, delayed: true
process_in_background :photo
end
Run Code Online (Sandbox Code Playgroud)
没有控制器代码,因为表单由ActiveAdmin处理.我可以覆盖任何需要的地方,但无法弄清楚需要改变的地方.
为了获得正确的事件顺序,我需要更改什么?