gpt4 book ai didi

ios - objective-C 。 NSString 改为 NSCFNumber

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:21:47 28 4
gpt4 key购买 nike

我在 Objective-C 中有一些代码。我想,我收到了 NSString 类型,但是当我尝试将它保存在核心数据中时,我得到了一个 user.clientID = clientID; 错误,例如:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unacceptable type of value for attribute: property = "clientID"; desired type = NSString; given type = __NSCFNumber; value = 29.'

所以,这是我的代码:

我的数据管理器单例 PKDataManager.h

+(PKDataManager*) sharedManager;

- (void)updateCoreDataUserWithID:(NSString*) userID
andClientID:(NSString*) clientID;

PKDataManager.m

- (void)updateCoreDataUserWithID:(NSString*) userID
andClientID:(NSString*) clientID{

PKUser*user = [NSEntityDescription
insertNewObjectForEntityForName:@"PKUser"
inManagedObjectContext:self.managedObjectContext];
user.userID = userID;
user.clientID = clientID; ///// error showing here
[self.managedObjectContext insertObject:user];
[self.managedObjectContext save:nil];
}

我的 API PKServerManager.h

单例
+ (PKServerManager*) sharedManager;

- (void) sendUserID:(NSString*) userID
onSuccess:(void(^)(NSString* clientID)) success
onFailure:(void(^)(NSError* error, NSInteger statusCode)) failure;

PKServerManager.m

- (void) sendUserID:(NSString*) userID
onSuccess:(void(^)(NSString* clientID)) success
onFailure:(void(^)(NSError* error, NSInteger statusCode)) failure{
NSDictionary* params =
[NSDictionary dictionaryWithObjectsAndKeys:
userID, @"userID", nil];
[self.requestOperationManager
POST:@"app/registration"
parameters:params
progress:nil
success:^(NSURLSessionTask *task, NSDictionary* responseObject) {
NSLog(@"JSON: %@", responseObject);
NSString* clientID = (NSString*)[responseObject objectForKey:@"clientId"];
if (success) {
success(clientID);
}
} failure:^(NSURLSessionTask *operation, NSError *error) {
}];
}

和我的代码:PKProfile.m

[[PKServerManager sharedManager]
sendUserID:profile.userID
onSuccess:^(NSString* clientID) {
NSLog(@"clientID %@", clientID);
[[PKDataManager sharedManager] updateCoreDataUserWithID: profile.userID
andClientID: clientID];
}
onFailure:^(NSError *error, NSInteger statusCode) {
}];

最佳答案

您的错误是告诉您响应包含客户端 ID 的数值(并且在 responseObject 中表示为 NSNumberNSCFNumber 是更广泛的 NSNumber 类集群的一部分)。您的 JSON 响应似乎包含类似以下内容:

{
...,
"clientId": 42
}

而不是

{
...,
"clientId": "42"
}

与其关注如何将此 NSNumber 转换为 NSString,不如考虑将整个应用程序中的客户端 ID 更改为 NSInteger (或 NSNumber)。如果这些 ID 真的是数值,最好有一个类型来反射(reflect)这一点。

关于ios - objective-C 。 NSString 改为 NSCFNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48668615/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com