Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 处理RequestAttributeDetailsWithBlock和NSDictionary。将任何类型转换为NSString,而不知道其确切含义_Ios_Objective C_Nsstring - Fatal编程技术网

Ios 处理RequestAttributeDetailsWithBlock和NSDictionary。将任何类型转换为NSString,而不知道其确切含义

Ios 处理RequestAttributeDetailsWithBlock和NSDictionary。将任何类型转换为NSString,而不知道其确切含义,ios,objective-c,nsstring,Ios,Objective C,Nsstring,在本例中,我想将[AttributeDetails valueForKey:key]转换为NSString。但我不知道它到底是什么,可能是int、string或boolean,我只想把它们都转换成NSString。那么我该如何解决这个问题呢 更新: NSString *str = nil; NSString *key = [[NSString alloc] initWithCString:(const char*)attr encoding:NSUTF8StringEncoding]; str

在本例中,我想将[AttributeDetails valueForKey:key]转换为NSString。但我不知道它到底是什么,可能是int、string或boolean,我只想把它们都转换成NSString。那么我该如何解决这个问题呢

更新:

NSString *str = nil;
NSString *key = [[NSString alloc] initWithCString:(const char*)attr encoding:NSUTF8StringEncoding];
str = [attributionDetails valueForKey:key];
我可以用这种方法解决这个问题吗?我将值传递给NSObject,不管它是什么类型,然后将NSObject转换为NSString

更新2: 整个方法如下。行吗

 NSString* key = [[NSString alloc] initWithCString:(const char*)attr encoding:NSUTF8StringEncoding];
    NSObject* obj = [attributionDetails valueForKey:key];
    NSString* str = (NSString*)obj;

创建一个mathod或category,如果xx是NSString类,只需使用,否则为nil或booleans,然后返回转换值

创建一个mathod或category,如果xx是NSString类,只需使用,否则为nil或booleans,然后返回转换值

从类
NSObject
派生的每个类型实现协议
NSObject
,该协议具有以下方法:

说明

必需。返回描述接收器内容的字符串

因此,它可以获取您的字符串,您只需执行以下操作:

char* _getIad(char* attr)
{
    NSString* str = nil;
    [[ADClient sharedClient] requestAttributionDetailsWithBlock: 
        ^(NSDictionary *attributionDetails, NSError *error) 
        {
            if(error.code == ADClientErrorLimitAdTracking) 
            { 
                return; 
            }
            if(!error)
            {
                NSString* key = [[NSString alloc] initWithCString:(const char*)attr encoding:NSUTF8StringEncoding];
                NSObject* obj = [attributionDetails valueForKey:key];
                str = (NSString*)obj;
            }
            return;
        }];
    return strdup([str UTF8String]);
}
description
返回的字符串用于显示目的,不需要很容易解析回它所描述的值,但由于您“只需要存储值,而不是使用它”,所以应该足够了


HTH

从类
NSObject
派生的每个类型实现协议
NSObject
,该协议具有以下方法:

说明

必需。返回描述接收器内容的字符串

因此,它可以获取您的字符串,您只需执行以下操作:

char* _getIad(char* attr)
{
    NSString* str = nil;
    [[ADClient sharedClient] requestAttributionDetailsWithBlock: 
        ^(NSDictionary *attributionDetails, NSError *error) 
        {
            if(error.code == ADClientErrorLimitAdTracking) 
            { 
                return; 
            }
            if(!error)
            {
                NSString* key = [[NSString alloc] initWithCString:(const char*)attr encoding:NSUTF8StringEncoding];
                NSObject* obj = [attributionDetails valueForKey:key];
                str = (NSString*)obj;
            }
            return;
        }];
    return strdup([str UTF8String]);
}
description
返回的字符串用于显示目的,不需要很容易解析回它所描述的值,但由于您“只需要存储值,而不是使用它”,所以应该足够了


HTH

在您不知道结果是什么的情况下,您希望如何格式化结果?您可以对对象调用
-description
,将其转换为字符串,但这并不意味着结果的格式对您有用…@Itai Ferber嗯,AttributeDetails是NSDictionary的一个对象,它可能包含整数、字符串和布尔值。这就是我所知道的。但是我需要一种通用的方法来将值传递给NSString对象,不管该值是什么类型的。我只需要存储值,而不是使用它。如果你不知道结果是什么,你希望结果如何格式化?您可以对对象调用
-description
,将其转换为字符串,但这并不意味着结果的格式对您有用…@Itai Ferber嗯,AttributeDetails是NSDictionary的一个对象,它可能包含整数、字符串和布尔值。这就是我所知道的。但是我需要一种通用的方法来将值传递给NSString对象,不管该值是什么类型的。我只需要存储值,而不是使用它。为了清楚起见,
description
的输出永远不应该用于显示给用户。它只能用于调试。你决不能依赖它的格式。它可以在任何iOS更新中更改。如果AttributeDetails[key]是一种基本类型呢?它们是从NSObject派生的吗?@Frank.W-an
NSDictionary
(或任何NS集合类)只包含对象类型。对于要包含在此类集合中的基元类型,必须将其包装为对象,例如
NSNumber
@rmaddy-我认为这是一个很好的建议,而不是一个绝对规则,出于调试目的,有可选的协议方法
debugDescription
。也就是说,虽然不清楚OP为什么要寻求这种字符串转换,但它似乎不是出于用户界面的目的。更清楚的是,
description
的输出不应用于向用户显示。它只能用于调试。你决不能依赖它的格式。它可以在任何iOS更新中更改。如果AttributeDetails[key]是一种基本类型呢?它们是从NSObject派生的吗?@Frank.W-an
NSDictionary
(或任何NS集合类)只包含对象类型。对于要包含在此类集合中的基元类型,必须将其包装为对象,例如
NSNumber
@rmaddy-我认为这是一个很好的建议,而不是一个绝对规则,出于调试目的,有可选的协议方法
debugDescription
。也就是说,虽然不清楚OP为什么要寻求这种字符串转换,但它似乎不是出于UI目的。