小编Eth*_*ick的帖子

如何在NSUserDefaults中存储自定义对象

好吧,所以我一直在做一些戳,我意识到我的问题,但我不知道如何解决它.我已经创建了一个自定义类来保存一些数据.我为这个类制作了对象,我需要它们在会话之间持续.在我将所有信息都放入之前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 encoding objective-c nsuserdefaults ios

266
推荐指数
7
解决办法
13万
查看次数

NSUserDefaults - 如何判断密钥是否存在

我正在开发一个小型iPhone应用程序,我正在使用NSUserDefaults我的数据持久性.它只需跟踪一些事情,例如一些名字和一些数字,所以我想我也可以保持简单.

我找到了这个页面作为参考,但我不认为它可以回答我的问题.基本上,我希望能够检查一个值(或一个键)是否已经存在NSUserDefaults,然后相应地做一些事情.

一些例子:应用程序启动,如果这是第一次启动它会输出一个表示欢迎的警报.要判断这是否是第一次打开,它会读取UserDefaults并检查.

示例2:它表示"Hello [Name]",其中Name是您输入的内容.如果你打开了应用程序并且没有名字,那就应该说"Hello World".我需要检查您是否已经输入了名称并采取相应措施.该名称将存储在NSUserDefaults.

有些帮助吗?我真的很感激!

iphone objective-c nsuserdefaults ios

203
推荐指数
6
解决办法
10万
查看次数

如何以编程方式创建UIScrollView?

好吧,所以这里的关键是我根本不使用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 objective-c uiscrollview

38
推荐指数
3
解决办法
8万
查看次数

从Objective-C中的方法返回多个值

我问了一个类似的问题,但我无法让它完全正常工作.我正在构建一个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诸如此类的东西.另外,我怎么称呼这种方法?

iphone objective-c return-value

26
推荐指数
5
解决办法
4万
查看次数

昏暗的iPhone屏幕,但不要让它睡觉

更新

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScreen_Class/index.html#//apple_ref/occ/instp/UIScreen/brightness

这是用于控制屏幕亮度的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秒调暗屏幕.)是否有一种有效的方法可以做到这一点?

iphone sleep objective-c

26
推荐指数
1
解决办法
6326
查看次数

PHP显示服务器IP地址

我正在网站上工作,我想做的其中一件事就是向用户显示我的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".有帮助吗?

php ip ip-address

20
推荐指数
1
解决办法
7万
查看次数

从其他类访问方法Objective-C

寻找这个问题的答案,但我还没有找到合适的答案.我希望你们(和女孩们)可以帮助我!(这适用于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 ...我该怎么做?

再次感谢!

iphone methods class object objective-c

19
推荐指数
2
解决办法
3万
查看次数

使用Rails 4.0进行自定义错误处理

我正在使用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)

json ruby-on-rails actiondispatch ruby-2.0 ruby-on-rails-4

15
推荐指数
4
解决办法
1万
查看次数

如何在基于Express的API上设置代码覆盖率?

我已经解决了这个问题一段时间了,我不能让现有的解决方案适合我.

我有一个用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)

两者都遭遇同样的问题:

https://www.dropbox.com/s/qcgmout6hx91xgs/Screenshot%202014-04-19%2020.42.44.png

你看,这是一个示例路由(用户注册).我的测试肯定会覆盖它,但由于它们不直接调用这种方法,因此覆盖工具假设它从未被调用过.这就是问题 - 代码覆盖工具没有捕获最终执行的代码.

我尝试了另一种解决方案 - 伊斯坦布尔中间件,它实际上似乎更好地捕获了信息(尽管它很笨拙).然而,这里的相同路线如下:

在此输入图像描述

这显然也是不可取的.当然其他应用程序遇到了这个问题,他们如何去做呢?

注意:我已经安装了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的代码覆盖率

code-coverage mocha.js node.js express istanbul

14
推荐指数
2
解决办法
4409
查看次数

在字典中存储整数

据我所知,在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 dictionary integer objective-c nsnumber

13
推荐指数
2
解决办法
9032
查看次数