好吧,所以我一直在做一些戳,我意识到我的问题,但我不知道如何解决它.我已经创建了一个自定义类来保存一些数据.我为这个类制作了对象,我需要它们在会话之间持续.在我将所有信息都放入之前NSUserDefaults,但这不起作用.
-[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '<Player: 0x3b0cc90>' of class 'Player'.
Run Code Online (Sandbox Code Playgroud)
这是我将自定义类"Player"放入的错误消息NSUserDefaults.现在,我读过,显然NSUserDefaults只存储了某些类型的信息.那么我如何让我的对象进入NSUSerDefaults?
我读到应该有一种方法来"编码"我的自定义对象,然后把它放进去,但我不知道如何实现它,帮助将不胜感激!谢谢!
****编辑****
好吧,所以我使用下面给出的代码(谢谢!),但我仍然有一些问题.基本上,代码崩溃了,我不知道为什么,因为它没有给出任何错误.也许我错过了一些基本的东西,我太累了,但我们会看到.这是我的Custom类"Player"的实现:
@interface Player : NSObject {
NSString *name;
NSNumber *life;
//Log of player's life
}
//Getting functions, return the info
- (NSString *)name;
- (int)life;
- (id)init;
//These are the setters
- (void)setName:(NSString *)input; //string
- (void)setLife:(NSNumber *)input; //number
@end
Run Code Online (Sandbox Code Playgroud)
实施档案:
#import "Player.h"
@implementation Player
- (id)init {
if (self = [super init]) {
[self setName:@"Player …Run Code Online (Sandbox Code Playgroud) 我正在开发一个小型iPhone应用程序,我正在使用NSUserDefaults我的数据持久性.它只需跟踪一些事情,例如一些名字和一些数字,所以我想我也可以保持简单.
我找到了这个页面作为参考,但我不认为它可以回答我的问题.基本上,我希望能够检查一个值(或一个键)是否已经存在NSUserDefaults,然后相应地做一些事情.
一些例子:应用程序启动,如果这是第一次启动它会输出一个表示欢迎的警报.要判断这是否是第一次打开,它会读取UserDefaults并检查.
示例2:它表示"Hello [Name]",其中Name是您输入的内容.如果你打开了应用程序并且没有名字,那就应该说"Hello World".我需要检查您是否已经输入了名称并采取相应措施.该名称将存储在NSUserDefaults.
有些帮助吗?我真的很感激!
好吧,所以这里的关键是我根本不使用IB,因为我正在使用的View是以编程方式创建的.该UIView覆盖下半部分的屏幕,并有一堆上的按钮.但是,我想添加更多按钮UIView,而不是更大.为此,我想UIScrollView在视图内部进行操作,这将允许我在屏幕上添加更多按钮,以便用户可以滚动到它们.我认为这是它的工作原理.
self.manaView = [[[UIView alloc] initWithFrame:frame] autorelease];
self.manaView.backgroundColor = [UIColor purpleColor];
UIScrollView *scroll = [UIScrollView alloc];
scroll.contentSize = CGSizeMake(320, 400);
scroll.showsHorizontalScrollIndicator = YES;
[self.manaView addSubview:scroll];
Run Code Online (Sandbox Code Playgroud)
代码的第一部分引用了我的UIView,它工作得很好,但我无法弄清楚如何以UIScrollView编程方式进行并将其添加到视图中,然后向其添加按钮.
UIButton *ret2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
ret2.tag = 102;
ret2.frame = CGRectMake(255, 5, 60, 50);
[ret2 setTitle:@"Return" forState:UIControlStateNormal];
[ret2 addTarget:self action:@selector(flipAction:) forControlEvents:UIControlEventTouchUpInside];
[scroll addSubview:ret2];
Run Code Online (Sandbox Code Playgroud)
当我这样做时,按钮就会从屏幕上消失.那么我该怎么做呢?谢谢您的帮助!
我问了一个类似的问题,但我无法让它完全正常工作.我正在构建一个iPhone应用程序,我想从不同的文件中调用一个方法.我认为最简单的方法就是在另一个文件中创建一个方法,并从其他文件中调用该方法.
这是一些问题.我需要在传递多个值后从该方法返回多个值.例如,我正在传递它:(int, int, int, string, string).并且它们需要在更改后返回所有这些值.有人给我看了这段代码:
- (NSDictionary *)EndOfTurn:(int)varTurns withFatness:(int)varFatness
{
varTurns--;
if (varTurns <= 0) {
varFatness = varFatness - 5;
}
else {
varFatness += 2;
}
return [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:varFatness], @"FATNESS", [NSNumber numberWithInt:varTurns], @"TURNS", nil];
}
Run Code Online (Sandbox Code Playgroud)
但是,此代码不起作用,我需要更多信息才能真正理解它.让我们假设我传递了这些值:
int varMoney;
int varNumSheep;
int varNumShepherds;
NSString *test1;
NSString *test2;
Run Code Online (Sandbox Code Playgroud)
所以我需要从方法中获取所有这些值.
如何在头文件中声明这个?这应该是一个Objective-C文件,但是你可以给我整个文件的代码,这样我就可以看到它会带来什么,@implementation以及@end诸如此类的东西.另外,我怎么称呼这种方法?
这是用于控制屏幕亮度的Apple Doc.以下是原始问题.
我发现使用Google可以通过以下方式禁用iPhone在应用程序中睡眠:
application.idleTimerDisabled = YES;
Run Code Online (Sandbox Code Playgroud)
所以代码看起来像这样:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after application launch
// This disables the autosleep I added this to TEST,
// delete later if you want:-
application.idleTimerDisabled = YES;
[window addSubview:switchViewController.view];
[window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)
完美,效果很好.但是,我的问题是,我可以以某种方式禁止iPhone进入睡眠状态,同时仍然允许屏幕变暗吗?或者也许在应用程序中自己调暗屏幕以节省电池电量?
我绝对不希望iPhone睡觉,但我也希望用户友好/电池友好,并调暗屏幕.(你知道,就像你可以将iPhone设置为在睡眠前X秒调暗屏幕.)是否有一种有效的方法可以做到这一点?
我正在网站上工作,我想做的其中一件事就是向用户显示我的IP地址.该网站是使用CodeIgniter制作的,所以我希望用PHP找到我的服务器IP.IP地址可能会改变(它是漫游者),所以我想动态地找到它,而不仅仅是硬编码.我试过这个:
$data['hostname'] = NULL;
$data['ip'] = NULL;
$var = gethostname();
if ($var === FALSE) {
$var = NULL;
} else {
$data['hostname'] = $var;
$data['ip'] = gethostbyname($var);
}
Run Code Online (Sandbox Code Playgroud)
但是,我得到了"Moria"和"127.0.1.1",而不是给我主机名和IP.不是我想要的.相反,它应该为主机名和IP地址说"Moria.student.rit.edu".有帮助吗?
寻找这个问题的答案,但我还没有找到合适的答案.我希望你们(和女孩们)可以帮助我!(这适用于iPhone应用程序)
好吧,我有一个Mutliview应用程序.每个视图都有自己的类,一切都很开心.但是,不同的类有时会调用相同的方法.到目前为止,我只是在两个类文件中编写了两次Method.
这是我想要做的事情:
我想在它自己的文件中创建一个具有所有"常用"方法的新类.然后,每当另一个类需要调用Method时,我只需从另一个文件中调用它.这样,当我想要改变方法时,我只需要在一个地方改变它,而不是所有地方......
我不确定我是怎么做到的,这就是为什么我要求帮助.对于Objective-C我有点生疏和新的,所以漂亮的例子对我很有帮助.请允许我给你一个.
文件:ViewController1.m
@implementation ViewController1
//Do Some awesome stuff....
CALL "CommonMethod" HERE
@end
Run Code Online (Sandbox Code Playgroud)
文件:ViewController2.m
@implementation ViewController2
//Do Some awesome stuff....
CALL "CommonMethod" HERE
@end
Run Code Online (Sandbox Code Playgroud)
文件:CommonClass
@implementation commonClass
- (void)CommonMethod:(id)sender
{
//So some awesome generic stuff...
}
@end
Run Code Online (Sandbox Code Playgroud)
我觉得我需要#import另一个文件,从类中创建一个Object并从Object调用Method ...我该怎么做?
再次感谢!
我正在使用Ruby 2.0和Rails 4.0构建Ruby on Rails api.我的应用程序几乎只是一个JSON API,所以如果发生错误(500,404),我想捕获该错误并返回格式良好的JSON错误消息.
我试过这个并且还:
rescue_from ActionController::RoutingError, :with => :error_render_method
def error_render_method
puts "HANDLING ERROR"
render :json => { :errors => "Method not found." }, :status => :not_found
true
end
Run Code Online (Sandbox Code Playgroud)
在我的ApplicationController中.
这些都没有做到这一点(根本没有捕获例外).我的谷歌搜索显示这在3.1,3.2之间发生了很大变化,我找不到任何关于如何在Rails 4.0中做到这一点的好文档.
有人知道吗?
编辑 这是我进入404页面时的堆栈跟踪:
Started GET "/testing" for 127.0.0.1 at 2013-08-21 09:50:42 -0400
ActionController::RoutingError (No route matches [GET] "/testing"):
actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged' …Run Code Online (Sandbox Code Playgroud) 我已经解决了这个问题一段时间了,我不能让现有的解决方案适合我.
我有一个用Express.js编写的Node.js API.我一直在使用Mocha,Chai和Supertest为API编写测试.这些测试主要是集成测试.
一个测试可能看起来像:
it('should fail to register a new user without the proper information', function(done) {
api.post('/user')
.send({})
.expect(400)
.expect('Content-Type', /json/)
.end(function(err, res) {
should.exist(res.body);
should.exist(res.body.error);
should.not.exist(err);
res.body.error.should.contain('Username');
res.body.error.should.contain('password');
done();
});
});
Run Code Online (Sandbox Code Playgroud)
实际测试工作得很好,但现在我需要能够查看这些测试的代码覆盖率.我必须知道我没有充分测试.我尝试过使用Mocha的测试覆盖率:
mocha -R html-cov --coverage > coverage.html
Run Code Online (Sandbox Code Playgroud)
和伊斯坦布尔的:
istanbul cover _mocha -- -R spec --timeout 5000
Run Code Online (Sandbox Code Playgroud)
两者都遭遇同样的问题:

你看,这是一个示例路由(用户注册).我的测试肯定会覆盖它,但由于它们不直接调用这种方法,因此覆盖工具假设它从未被调用过.这就是问题 - 代码覆盖工具没有捕获最终执行的代码.
我尝试了另一种解决方案 - 伊斯坦布尔中间件,它实际上似乎更好地捕获了信息(尽管它很笨拙).然而,这里的相同路线如下:

这显然也是不可取的.当然其他应用程序遇到了这个问题,他们如何去做呢?
注意:我已经安装了jscoverage以使所有这些工作.
我看过的来源:
https://brianstoner.com/blog/testing-in-nodejs-with-mocha/
http://boycook.wordpress.com/2013/03/29/automated-javascript-testing-with -mocha-and-js-coverage-for-nodejs/
Mocha的代码覆盖率
据我所知,在Objective-C中,您只能将对象放入词典中.因此,如果我要创建一个字典,它必须拥有所有对象.这意味着我需要把我的注意力作为NSNumber,对吧?
SOO ...
NSNumber *testNum = [NSNumber numberWithInt:varMoney];
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:@"OMG, Object 1!!!!" forKey:@"1"];
[dictionary setObject:@"Number two!" forKey:@"2"];
[dictionary setObject:testNum forKey:@"3"];
NSNumber *retrieved = [dictionary objectForKey:@"3"];
int newVarMoney = [retrieved intValue];
Run Code Online (Sandbox Code Playgroud)
其中varMoney是先前声明的int.我的问题是,有没有更好的方法将"int"存储在字典中而不是将其存入NSNumber?
谢谢!
编辑:04/25/13
我问这个问题已经很久了.对于将来遇到困难的人来说,有更简单的方法可以使用Apple LLVM Compiler 4.0,它在Xcode中默认为一点.(弧)
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
[dictionary setObject:@1337 forKey:@"1"];
Run Code Online (Sandbox Code Playgroud)
就是这样,使用@ 1337语法快速创建NSNumber对象.与变量一起使用,所以我的上面可能变成:
[dictionary setObject:@(varMoney) forKey:@"3"];
Run Code Online (Sandbox Code Playgroud)
要么
dictionary[@"mykey"] = @1337;
Run Code Online (Sandbox Code Playgroud)
简单.
iphone ×7
objective-c ×7
ios ×2
class ×1
dictionary ×1
encoding ×1
express ×1
integer ×1
ip ×1
ip-address ×1
istanbul ×1
json ×1
methods ×1
mocha.js ×1
node.js ×1
nsnumber ×1
object ×1
php ×1
return-value ×1
ruby-2.0 ×1
sleep ×1
uiscrollview ×1