我正在尝试运行此自定义rake任务以将数据导入我的Rails 3.1应用程序:
desc "Import users."
task :import_users => :environment do
File.open("users.txt", "r").each do |line|
name, email, age = line.strip.split("\t")
u = User.new(:name => name, :email => email, :age => age)
u.save
end
end
Run Code Online (Sandbox Code Playgroud)
我将文件保存为import_users.rake并将其放在我的应用程序的lib/tasks目录中.
但是,当我尝试rake import_users在命令行中运行时,我收到此错误:
No such file or directory - users.txt
我将users.txt放在与.rake文件(lib/tasks目录)相同的目录中,这是正确的位置吗?
我正在设置我的UITableView故事板编辑器.为了创建我的单元格,我使用标准委托方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SearchResultCell"];
if (cell == nil)
{
// Do cell setup
}
// etc
return cell;
}
Run Code Online (Sandbox Code Playgroud)
除非细胞第一次出现,否则它应该是非零的.所以if语句中的代码永远不会被执行.
当人们的重用标识符不一致时,人们会收到此错误,因此我继续验证我在故事板视图中使用与我的代码中完全相同的重用标识符.仍然面临着这个问题.我在项目中也有几个表视图,每个都有一个唯一的重用标识符.仍然没有骰子.任何人都知道其他任何错误吗?
我有一个字典,其键由NSNumbers 组成.我使用keysSortedByValueUsingComparator如下:
NSArray *sortedKeys = [self.platformDict keysSortedByValueUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [(NSNumber*)obj2 compare:(NSNumber*)obj1];
}];
Run Code Online (Sandbox Code Playgroud)
然而,这是我得到的结果:
(lldb) po sortedKeys
(NSArray *) $1 = 0x0704bd20 <__NSArrayI 0x704bd20>(
100000,
250000,
1000000,
500000,
3000000,
2000000,
5000000,
10000000
)
Run Code Online (Sandbox Code Playgroud)
这是不正常的.这是方法实现的错误还是这里有另一个问题?
我正在使用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
我有一个函数,我想在NSString和一个int参数,然后使用switch语句,以返回一个计算值,如int乘以一些常量,具体取决于提供的NSString.
显然,switch语句不适用于Objective-C中的对象.那么最快的选择是什么?是if-else语句吗?还是有更优雅的方法?
编辑
我关心性能的原因是我正在修改用户正在观看的UI元素,这是这些计算的最终结果,我不希望它感到迟钝.
在iOS 4中,如果要关闭两个嵌套的模态视图控制器,则以下代码有效:
[[[[self parentViewController] parentViewController] parentViewController] dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)
但是在iOS 5中,此方法不再有效.有谁知道如何在iOS 5中实现这个结果?
我正在尝试更新我的pg gem,我收到以下错误
Building native extensions. This could take a while...
ERROR: Error installing pg:
ERROR: Failed to build gem native extension.
/Users/larson/.rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb --with-pg-config=/Library/PostgreSQL/9.1/bin/pg_config
Using config values from /Library/PostgreSQL/9.1/bin/pg_config
checking for libpq-fe.h... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/Users/larson/.rvm/rubies/ruby-1.9.2-p290/bin/ruby
--with-pg
--without-pg
--with-pg-dir …Run Code Online (Sandbox Code Playgroud) 在我的UITableViewController子类中,我按如下方式注册我的单元类:
[[self fieldListTableView] registerClass:[MyCellClass class] forCellReuseIdentifier:@"MyCellIdentifier"];
然后,我使用iOS 6中引入的方法将单元格出列:
MyCellClass* cell = (MyCellClass *)[tableView dequeueReusableCellWithIdentifier:@"MyCellIdentifier" forIndexPath:indexPath];
但是,单元格的xib文件似乎缺失了.当我po cell在lldb中运行时,我得到一个有效的单元格对象.然后,当我尝试时po [cell myLabelOutlet],我得到了nil回应.
我是否也需要注册XIB文件?
所以我的理解是,如果该方法没有实现初始化对象的新实例,那么在方法名称中使用init是不可取的.但是,单例类型的情况是什么?如果我做这样的事情:
+ (MyClass*) sharedInstance {
__block MyClass *sharedInstance = nil;
static dispatch_once_t once_token;
dispatch_once(&once_token, ^{
sharedInstance = [[MyClass alloc] init];
});
return sharedInstance;
}
Run Code Online (Sandbox Code Playgroud)
然后有另一种方法:
- (void) initializeInstance {
// Do some stuff
// Never call the init method
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,是否会有额外的保留周期或其他奇怪的ARC行为?
假设我有一个类Foo,它使用3种方法声明一个委托协议.我想将子类Foo化为一个被调用的类,Bar并完全覆盖这些方法.
我应该再次在子类标题中声明它们吗?
当我在Bar委托中实现这3个方法时,我是否必须采取任何预防措施以确保Foo不会使用该实现?
objective-c ×6
ios ×5
ios5 ×3
uitableview ×2
cocoa-touch ×1
data-import ×1
delegates ×1
ios6 ×1
ios7 ×1
nsdictionary ×1
nsstring ×1
performance ×1
pg ×1
postgresql ×1
rake ×1
rubygems ×1
singleton ×1
uikit ×1
uistoryboard ×1