小编fuz*_*oat的帖子

将NSMutableArray对象保存/写入磁盘?

最初我认为这会起作用,但现在我明白它不会因为artistCollection是"Artist"对象的NSMutableArray.

@interface Artist : NSObject {
    NSString *firName;
    NSString *surName;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,将"Artist"对象的NSMutableArray记录到磁盘的最佳方法是什么,以便我可以在下次运行应用程序时加载它们?

artistCollection = [[NSMutableArray alloc] init];

newArtist = [[Artist alloc] init];
[newArtist setFirName:objFirName];
[newArtist setSurName:objSurName];
[artistCollection addObject:newArtist];

NSLog(@"(*) - Save All");
[artistCollection writeToFile:@"/Users/Fgx/Desktop/stuff.txt" atomically:YES];
Run Code Online (Sandbox Code Playgroud)

编辑

非常感谢,这是我最好的一件事.如果"Artist"包含其他对象(Applications)的NSMutableArray(softwareOwned)的额外实例变量,我将如何扩展编码以涵盖此内容?我会将NSCoding添加到"Applications"对象,然后在编码"Artist"之前对其进行编码,还是有办法在"Artist"中指定它?

@interface Artist : NSObject {
    NSString *firName;
    NSString *surName;
    NSMutableArray *softwareOwned;
}

@interface Application : NSObject {
    NSString *appName;
    NSString *appVersion;
}
Run Code Online (Sandbox Code Playgroud)

非常感谢

加里

cocoa objective-c

6
推荐指数
2
解决办法
8547
查看次数

NSCheckingResult范围属性未设置为{NSNotfound,0}?

通过查看文档,NSTextCheckingResult我认为如果找不到NSRegularExpression搜索中的匹配项,NSCheckingResult则将设置范围属性设置为{NSNotFound,0}

根据我在下面的测试,我发现如果找不到匹配,则将NSCheckingResult范围设置为{0,0}.这是一个小问题,但我只是想澄清一下我对它是如何工作的理解.

// REGEXPRESSION  
NSString *textBuffer = @"1234567890";
NSString *pattern = @"(([A-Z]+))";
NSRegularExpression *regExp = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];
NSTextCheckingResult *match = [regExp firstMatchInString:textBuffer options:0 range:NSMakeRange(0, [textBuffer length])];

// ERROR CHECK
if([match range].location == NSNotFound) NSLog(@"Match Not found");
NSLog(@"location: %d", [match range].location);
NSLog(@"length  : %d", [match range].length);

// OUTPUT
location: 0
length  : 0
Run Code Online (Sandbox Code Playgroud)

编辑:在此示例NSTextCheckingResult *match中设置为nil,这可能是位置和长度返回零(消息到nil对象)的原因.

if(!match) NSLog(@"Match Not Found");
Run Code Online (Sandbox Code Playgroud)

因此我猜测NSNotFound只有当有多个捕获组时它才会返回,它代表一个空组.

regex iphone cocoa-touch objective-c nsregularexpression

6
推荐指数
1
解决办法
1326
查看次数

划掉Xcode自动完成?

无法在文档中找到解释,是否有人能够向我解释下图中红色划线坐标的含义?

在此输入图像描述

xcode

6
推荐指数
1
解决办法
2083
查看次数

从UIColor获得RGBA Color Components的更好方法是什么?

是否有更快(或更好)的方法从UIColor获取[RGBA]颜色组件?这周围似乎有很多变化(有些在这里,所有基本上与我在这里所做的相似)我只是好奇,如果有一个替代,因为它似乎有点"缺乏",因为其他一切都是如此完整而深思熟虑.

if([eachKey isEqualToString:@"NSColor"]) {
    UIColor *newColor = [attrs valueForKey:eachKey];
    //NSLog(@"COLOR: %@", newColor);
    CGColorRef colorRef = [newColor CGColor];
    //NSLog(@"%@", colorRef);
    int numComponets = CGColorGetNumberOfComponents(colorRef);
    if(numComponets == 4) {
        const CGFloat *components = CGColorGetComponents(colorRef);
        CGFloat compR = components[0];
        CGFloat compG = components[1];
        CGFloat compB = components[2];
        CGFloat compA = components[3];

        //NSLog(@"R:%f G:%f B:%f, A:%f", compR, compG, compB, compA);
    }
}
Run Code Online (Sandbox Code Playgroud)

我不是在寻找(我认为我有上面的长版本)我想知道这是不是你应该这样做的方式呢?

iphone cocoa-touch objective-c

6
推荐指数
1
解决办法
3484
查看次数

使用故事板时设置完成的TabBar图像?

我正在开发一个应用程序,其中大部分UI是通过Xcode中的Storyboard设置的.我想要做的一件事是在TabBar上为UITabBarItem指定"完成"图像,而不是可以通过Interface Builder访问的默认"Stencilled"图像.

我的问题是哪里是最好的地方,我目前在awakeFromNib中这样做,因为它需要在故事板上取消归档时完成,但我不确定我是否应该使用initWithCoder:相反,哪个最好呢?这很重要吗?

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if(self) {
        UIImage *tabIn  = [UIImage imageNamed:@"TAB_IN"];
        UIImage *tabOut = [UIImage imageNamed:@"TAB_OUT"];

        UITabBarItem *tabBarItem = [self tabBarItem];
        [tabBarItem setFinishedSelectedImage:tabOut withFinishedUnselectedImage:tabIn];
        [tabBarItem setTitle:@"TWO"];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

要么

- (void)awakeFromNib {
    [super awakeFromNib];
    UIImage *tabIn  = [UIImage imageNamed:@"TAB_IN"];
    UIImage *tabOut = [UIImage imageNamed:@"TAB_OUT"];

    UITabBarItem *tabBarItem = [self tabBarItem];
    [tabBarItem setFinishedSelectedImage:tabOut withFinishedUnselectedImage:tabIn];
    [tabBarItem setTitle:@"TWO"];
}
Run Code Online (Sandbox Code Playgroud)

据我所知,initWithCoder:当出口和操作尚未连接时,在从nib(包含在故事板中)取消归档对象的开始时调用.我也理解awakeFromNib在unarchiving过程结束时调用它并发出viewController现在可以使用的信号.我的感觉是,它实际上只取决于你想做什么,虽然使用awakeFromNib可能证明问题较少,因为你不会遇到出口和行动还没有联系起来的问题.

编辑:

让我改这个,你会用什么情况下initWithCoder:作为并列于awakeFromNib反之亦然?

iphone cocoa-touch objective-c awakefromnib initwithcoder

6
推荐指数
1
解决办法
353
查看次数

使用[key]表示法访问NSDictionary中的键?

我刚刚意识到我可以NSDictionary使用objectForKey:和dict [key]访问?

NSDictionary *coordsDict = @{@"xpos": @5.0, @"ypos": @7.2, @"zpos": @15.7};
NSLog(@"XPOS: %@", coordsDict[@"xpos"]);
NSLog(@"XPOS: %@", [coordsDict objectForKey:@"xpos"]);
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我,这一直是否一直向我隐瞒,或者是否有一些最新的语言变化?

编辑:这个问题一般不会引用新的字符串文字,但更具体地说是使用与NSArray相同的字符串文字语法来访问NSDictionary.我显然忽略了这一点,只是想检查何时添加了这个特定的语法.

objective-c nsdictionary objective-c-literals

6
推荐指数
1
解决办法
7409
查看次数

跳转到节点层次结构中的特定SKNode

我注意到SKNode方法childrenchildNodeWithName:名称暗示只返回查询节点正下方的子节点的结果.ie [root children];将返回NSArray包含节点的内容@[CUBE1, CUBE2, CUBE3].

在下图中,我想从ROOT(SKScene)级别下载到SPHERE2,以便我可以快速访问子节点.我希望这[root childNodeWithName:@"SPHERE2"];将遍历整个层次结构并返回指向SPHERE2的指针

在此输入图像描述

我的问题:是否有一些我错过的东西让我跳到指定点的节点树(即使用节点名称)

我可以使用属性来存储指向树中重要位置的指针,然后使用它们来访问和处理任何子节点,这是一个选项......

objective-c ios sprite-kit sknode

6
推荐指数
1
解决办法
2631
查看次数

指定随机粒子起始颜色没有动画更改?

有没有办法让粒子基于当前的"颜色渐变"以随机的每粒子颜色生成?颗粒在其使用寿命期间不会改变颜色,它们只是在出生时沿着"颜色斜坡"的某处分配颜色,并保持颜色直到它们死亡.

其结果是出生时的颗粒混合,从RED到BLUE的混合颜色.

颜色混合

在我的测试中,我似乎只能得到粒子产生为RED的行为,然后逐渐转向BLUE作为接近屏幕的底部.

在此输入图像描述 落叶

objective-c sprite-kit skemitternode

6
推荐指数
1
解决办法
2058
查看次数

找到儿童SKNode的绝对位置?

我有一个SKSpriteNode,它是滚动背景(即孩子)的父级.SKSpriteNode不会自动移动,它只会随着滚动背景一起移动.在背景移动时找到SKSpriteNode的绝对位置的最佳方法是什么.

ios7 sprite-kit sknode

6
推荐指数
1
解决办法
3000
查看次数

如何使用SKPhysicsBody复制SKSpriteNode?

我很好奇今天遇到的一种情况,当我试图将一个人SKSpriteNode从一个人复制SKScene到另一个人时.在下面的游乐场的输出中,您可以看到复制后都维护linearDamping和/ angularDamping或不维护(它们似乎都回退到默认值)

// PLAYGROUND_SW1.2 - SKSpriteNode Copy
import UIKit
import SpriteKit

// ORIGINAL
let spriteNode = SKSpriteNode()
spriteNode.name = "HAPPY_NODE"
let size = CGSize(width: 55.0, height: 150.0)
let physics = SKPhysicsBody(rectangleOfSize: size)
physics.linearDamping = 0.123
physics.angularDamping = 0.456
spriteNode.physicsBody = physics

// COPY
let spriteCopy = spriteNode.copy() as! SKSpriteNode

// ORIGINAL
spriteNode.name
spriteNode.physicsBody?.linearDamping
spriteNode.physicsBody?.angularDamping
spriteNode.physicsBody?.area

// COPY
spriteCopy.name
spriteCopy.physicsBody?.linearDamping
spriteCopy.physicsBody?.angularDamping
spriteCopy.physicsBody?.area
Run Code Online (Sandbox Code Playgroud)

游乐场输出 在此输入图像描述

我不确定我是否正确地复制了这两个SKSpriteNode并且SKPhysicsBody符合NSCopying如果你看看上面的输出area属性是在复制后维护的,据我所知这是基于创建size时指定的 …

copy sprite-kit skphysicsbody skspritenode swift

6
推荐指数
1
解决办法
2687
查看次数