小编Joh*_*eek的帖子

将setValuesForKeysWithDictionary与子对象和JSON一起使用

我有一个json字符串

{"name":"test","bar":{"name":"testBar"}}
Run Code Online (Sandbox Code Playgroud)

在目标c中我有一个对象

@interface Foo : NSObject {
}
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) Bar * bar;
@end
Run Code Online (Sandbox Code Playgroud)

我只是综合了这些属性.我有一个具有综合属性的子对象.

@interface Bar : NSObject {
}
@property (nonatomic, retain) NSString * name;
@end
Run Code Online (Sandbox Code Playgroud)

然后这里是我试图进入Foo对象的代码,其中响应是上面的json字符串:

    SBJsonParser *json = [[SBJsonParser new] autorelease];
    parsedResponse = [json objectWithString:response error:&error];
    Foo * obj = [[Foo new] autorelease];
    [obj setValuesForKeysWithDictionary:parsedResponse];
    NSLog(@"bar name %@", obj.bar.name);
Run Code Online (Sandbox Code Playgroud)

这会在NSLog语句中引发异常:

-[__NSCFDictionary name]: unrecognized selector sent to instance 0x692ed70'
Run Code Online (Sandbox Code Playgroud)

但是,如果我将代码更改为它的工作原理:

NSLog(@"bar name %@", [obj.bar valueForKey:@"name"]);
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么我不能做第一个例子,或者我做错了什么?

objective-c key-value-coding

8
推荐指数
2
解决办法
7509
查看次数

简单的C++链接列表

我有很多以前使用Java链接列表的经验,但我似乎对这种在C++中的简单尝试感到困惑.我在运行时遇到了分段错误,根据我的理解,它与分配空指针有关,但我对解决方案感到茫然.

编辑:谢谢大家的回复.代码现在正在运行,但试图使用

delete p;
在linkedList :: addNode的末尾导致运行时的分段错误.只是好奇,如果有人知道为什么会这样?

这是我更新的代码:

#include <iostream>
using namespace std;

class Node{
    public:
        int data;
    Node * next;
    Node(int x){
        data = x;
        next = NULL;
        }
    Node(int x, Node * y){
        data = x; 
        next = y;
        }
    };


class linkedList{
Node *head;
public:
    linkedList(){
        head = NULL;
        }
    void addNode(int value){
        Node *p;
        if(head == NULL)
            head = new Node (value, NULL);
        else{
            p=head;
            while(p->next !=NULL)
                p=p->next;
            p->next = new Node (value, NULL);
            }
        } …
Run Code Online (Sandbox Code Playgroud)

c++ linked-list

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

objective-c"发送到immutable对象的mutating方法"错误

我对objective-c很新,并尝试为iphone创建一个小应用程序.
我差不多完成了这个小错误.实际上,我已经用谷歌搜索了几个小时来找到一个合适的解决方案但不幸的是我无法找到一个有效的解决方案.
我在这里使用这个教程来构建一个UITableView:UITableView Tutorial 完整的错误消息如下所示:

*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'* - [NSCFArray insertObject:atIndex:]:发送到不可变对象的mutating方法'

这是数据控制器标题:MyLinksDataController.h

@interface MyLinksDataController : NSObject {

NSMutableArray *tableList; //<---important part

}

- (unsigned)countOfList;
- (id)objectInListAtIndex:(unsigned)theIndex;
- (void)addData:(NSString *)data; //<---important part
- (void)removeDataAtIndex:(unsigned)theIndex;

@property (nonatomic, copy, readwrite) NSMutableArray *tableList; //<---important part

.....
Run Code Online (Sandbox Code Playgroud)

和数据控制器方法:MyLinksDataController.m

#import "MyLinksDataController.h"

@implementation MyLinksDataController

@synthesize tableList;

- (id)init {

    if (self = [super init]) {

        NSLog(@"Initilizing DataController");
        //Instantiate list
        NSMutableArray *localList = [[NSMutableArray alloc] init];
        self.tableList = [localList copy];
        [localList release];

        //Add initial Data
        [self addData:@"AAAAAAAAAAAAAA"];
        [self addData:@"BBBBBBBBBBBBBB"]; …
Run Code Online (Sandbox Code Playgroud)

objective-c immutability nsstring nsmutablearray

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

iPhone CoreLocation:如何获得最准确的速度

我正在尝试将GPS功能添加到我的iPhone应用程序中.这是一个锻炼应用程序,将在步行或跑步时使用.所以我想用GPS来显示人在Mph和分钟/英里的移动速度.

我应该如何配置CLLocationManager以获得最佳结果?我该怎么设置理想的精度和距离过滤?

我尝试过:

distanceFilter = 10和desiredAccuracy = kCLLocationAccuracyNearestTenMeters

和阅读

CLLocation.speed属性

虽然需要一段时间才能更新,但在车内行驶时进行测试时,与汽车车速表相比,准确性似乎很好.我意识到更新延迟可能是查询GPS位置所需的时间,但我不确定更改上述两个参数是否会产生更好的结果.

我应该使用kCLLocationAccuracyBest和distanceFilter的其他值吗?

我很想听到其他人使用CoreLocation来获得速度.你在做什么来获得更准确的结果?

iphone cocoa-touch core-location

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

核心位置准确性问题

我有一个程序,位置管理器设置如下:

self.locationManager = [[CLLocationManager alloc] init];
[locationManager startUpdatingLocation];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone; 
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
Run Code Online (Sandbox Code Playgroud)

我需要精度到十米以内,然而,需要几次调用didUpdateToLocation委托方法才能找到准确度的位置.如何延迟调用此方法或仅指示何时达到所需的准确度以继续执行程序.

现在它尝试继续返回的第一个位置.即使是第二次位置更新也不如预期的那么准确.

提前致谢!

iphone gps location objective-c core-location

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

私有内部类合成意外的匿名类

当您使用私有内部类编译Java类时,似乎匿名类由于某种原因自动合成.这个类足以重现它:

public class SynthesizeAnonymous {
    public static void method() {
        new InnerClass();
    }

    private static class InnerClass {}
}
Run Code Online (Sandbox Code Playgroud)

编译时,这会生成预期的SynthesizeAnonymous.classSynthesizeAnonymous$InnerClass.class文件,但它也会生成一个奇怪的SynthesizeAnonymous$1.class文件,该文件对应java.lang.Object于合成的匿名子类.如果你看一下反汇编javap,看来默认的构造函数InnerClass获得了这个匿名类型的隐藏参数,并nullnew InnerClass()调用时传递给它.

为什么要创建这个类?即使InnerClass它不是静态的,也会创建它,但如果InnerClass不是私有的,或者没有InnerClass创建任何实例,则不会创建它.它是某种形式的访问控制?这是如何运作的?

java private language-implementation anonymous-class

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

写入用户文档文件夹C++

我正在尝试将一些信息写入用户的文档文件夹(例如C:\ Documents and Settings\[userName]),但我似乎无法找到如何以编程方式获取路径.有没有办法做到这一点?C++,不使用.NET.

谢谢!

c++ windows winapi

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

Java字节数组转换问题

我有一个字符串,其中包含一系列位(如"01100011")和一些while循环中的整数.例如:

while (true) {
    int i = 100;
    String str = Input Series of bits

    // Convert i and str to byte array
}
Run Code Online (Sandbox Code Playgroud)

现在我想要一个很好的最快方法将字符串和int转换为字节数组.到目前为止,我所做的是转换intString然后getBytes()在两个字符串上应用该方法.但是,它有点慢.有没有其他方法可以做到(可能)比那更快?

java

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

为什么套接字connect()到它自己的短暂端口?

connect()如果我使用自动分配的临时端口(5000-65534)范围内的端口连接到localhost,我可以可靠地获得一个Winsock套接字.具体来说,Windows似乎有一个系统范围的滚动端口号,它将尝试将其指定为客户端套接字的本地端口号.如果我创建套接字直到分配的数字刚好低于我的目标端口号,然后重复创建套接字并尝试连接到该端口号,我通常可以让套接字连接到自己.

我首先在一个重复尝试连接到localhost上的某个端口的应用程序中发生这种情况,当服务没有监听时,它很少成功建立连接并接收它最初发送的消息(恰好是Redis PING命令).

一个例子,在Python中(无需监听目标端口即可运行):

import socket

TARGET_PORT = 49400

def mksocket():
    return socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)

while True:
    sock = mksocket()
    sock.bind(('127.0.0.1', 0))
    host, port = sock.getsockname()
    if port > TARGET_PORT - 10 and port < TARGET_PORT:
        break
    print port

while port < TARGET_PORT:
    sock = mksocket()
    err = None
    try:
        sock.connect(('127.0.0.1', TARGET_PORT))
    except socket.error, e:
        err = e
    host, port = sock.getsockname()
    if err:
        print 'Unable to connect to port %d, used local port %d: %s' % (TARGET_PORT, …
Run Code Online (Sandbox Code Playgroud)

sockets windows port winsock

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

NSURL URLWithString:引发异常

简而言之,[NSURL URLWithString:]似乎提出了一个例外。根据文档“如果字符串格式错误,则返回nil。” 没有提到在任何情况下都引发例外情况。除此之外,nil在将字符串转换为URL之前,我都对URL进行了编码和检查。

在转换URL之前,任何人都可以提供有关它可能是哪个异常或我应该做的其他错误检查的任何建议吗?

如果您对详细信息感兴趣,则调用代码如下所示:

NSString* tmpText = [newUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
if (tmpText == nil) {
    // error handling
}
else {
    NSURL* tmpURL = [NSURL URLWithString:tmpText];
Run Code Online (Sandbox Code Playgroud)

这是从iTunes Connect下载的崩溃报告中的一部分:

8   libobjc.A.dylib                 0x300c1f84 objc_exception_throw
9   CoreFoundation                  0x3029a598 +[NSException raise:format:arguments:]
10  CoreFoundation                  0x3029a538 +[NSException raise:format:]
11  Foundation                      0x30696dde -[NSURL initWithString:relativeToURL:]
12  Foundation                      0x30696cd8 +[NSURL URLWithString:relativeToURL:]
13  Foundation                      0x30696cae +[NSURL URLWithString:]
14  Yummy                           0x000146ca -[DeliciousPostCell setUrl:] + 46
Run Code Online (Sandbox Code Playgroud)

该URL似乎是某种“错误”格式,但实际上应该返回一个nil异常。

我从未见过自己引发异常,因此无法使用XCode捕获代码并查看正在发生的情况。并且遇到问题的用户从未直接与我联系,因此我无法要求更多详细信息。任何建议,不胜感激。

更新(14/7/2009):看起来像这样的hack,但是我在可疑行周围添加了一个异常块。我还提出了Radar错误报告(#7031551),建议代码应与文档匹配。

iphone objective-c crash-reports

5
推荐指数
1
解决办法
5748
查看次数