RestKit 更新到 xcode 4.4.1 后的警告

Posted

技术标签:

【中文标题】RestKit 更新到 xcode 4.4.1 后的警告【英文标题】:warnings after updating to xcode 4.4.1 for RestKit 【发布时间】:2012-09-08 00:03:58 【问题描述】:

当我将 Xcode 更新到 4.4.1 时,它给了我 22 个使用 RestKit 库的警告。错误是这样的:

Direct access to objective-c's isa is deprecated in favor of object_setClass() and object_getClass()

我通过替换修复了 18 个警告:

%lu 替换为%u

object->isa 替换为object_getClass(object)

keyObject->isa 替换为object_getClass(keyObject)

还有 4 个我无法修复的警告,以下是警告及其描述:

文件名 1:RKManagedObjectMappingOperation.m 警告线 1:

NSAssert(mapping, @"Attempted to connect relationship for keyPath '%@' without a relationship mapping defined.");

警告说明1:

more '%' conversations than data arguments

文件名2:RKReachabilityObserver.m 警告线 2:

return [NSString stringWithFormat:@"<%@: %p host=%@ isReachabilityDetermined=%@ isMonitoringLocalWiFi=%d reachabilityFlags=%@>",
            NSStringFromClass([self class]), self, self.host, self.isReachabilityDetermined ? @"YES" : @"NO",
            self.isMonitoringLocalWiFi ? @"YES" : @"NO", [self reachabilityFlagsDescription]];

警告说明2:

format specifies type int but the argument has type NSString

文件名3:JSONKit.m 警告线 3:

if(JK_EXPECT_F(((id)keys[idx])->isa != encodeState->fastClassLookup.stringClass) && JK_EXPECT_F([(id)keys[idx] isKindOfClass:[NSString class]] == NO))  jk_encode_error(encodeState, @"Key must be a string object."); return(1); 

警告说明3:

Direct access to objective-c's isa is deprecated in favor of object_setClass() and object_getClass()

文件名4:NSManagedObject+ActiveRecord.m 第 4 行警告:

RKLogError(@"Property '%@' not found in %@ properties for %@", propertyName, [propDict count], NSStringFromClass(self));

警告说明4:

format specifies type id but the argument has type NSUInteger

如何解决?

【问题讨论】:

您是否针对这些问题在 RestKit 的 GitHub 项目上提交了错误?更好的是,带有修复的拉取请求! 不,我不知道该怎么做。 他们的问题跟踪器在这里:github.com/RestKit/RestKit/issues(如果您以后遇到更多错误,这是一个先查看的好地方) 【参考方案1】:

警告 1:

NSAssert(mapping, @"Attempted to connect relationship for keyPath '%@' without a relationship mapping defined.");

变成

NSAssert(mapping, @"Attempted to connect relationship for keyPath '%@' without a relationship mapping defined.", <<put the corresponding keyPath here >> );

NSAssert(mapping, @"Attempted to connect relationship for a keyPath without a relationship mapping defined.");

它说“比数据参数更多的 '%' 对话”意味着你有占位符,在这种情况下是 %@,但没有参数来填充它们。所以要么提供一个参数,要么删除占位符。

警告 2:

return [NSString stringWithFormat:@"<%@: %p host=%@ isReachabilityDetermined=%@ isMonitoringLocalWiFi=%d reachabilityFlags=%@>",
        NSStringFromClass([self class]), self, self.host, self.isReachabilityDetermined ? @"YES" : @"NO",
        self.isMonitoringLocalWiFi ? @"YES" : @"NO", [self reachabilityFlagsDescription]];

变成

return [NSString stringWithFormat:@"<%@: %p host=%@ isReachabilityDetermined=%@ isMonitoringLocalWiFi=%@ reachabilityFlags=%@>",
        NSStringFromClass([self class]), self, self.host, self.isReachabilityDetermined ? @"YES" : @"NO",
        self.isMonitoringLocalWiFi ? @"YES" : @"NO", [self reachabilityFlagsDescription]];

注意isMonitoringLocalWiFi=%d 部分得到%@ 而不是%d,因为您提供了一个字符串参数但有一个整数占位符。

警告 3:抱歉,无法帮助您解决此问题。可能在我查看代码后我会发布更新。

更新:尝试更改

((id)keys[idx])->isa

object_getClass( ((id)keys[idx]) )

警告 4:

RKLogError(@"Property '%@' not found in %@ properties for %@", propertyName, [propDict count], NSStringFromClass(self));

变成

RKLogError(@"Property '%@' not found in %d properties for %@", propertyName, [propDict count], NSStringFromClass(self));

请注意,第二个占位符应该是 %d 而不是 %@,因为您提供了一个整数,或者在本例中是一个 NSUInteger,即 [propDict count] 参数。

【讨论】:

太棒了,它修复了所有的警告,非常感谢:) @Rose 不客气 :) 如果您在理解这些警告方面仍需要帮助,请告诉我。

以上是关于RestKit 更新到 xcode 4.4.1 后的警告的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 框架的 Xcode 存档错误

尝试在 iOS 上使用 Restkit - XCode

xCode 4.3 使用 RestKit 归档项目失败:#import <RestKit/RestKit.h> Not found

在 Xcode 中设置 RestKit

无法让 RestKit 在 Xcode 4.6 中工作

安装 RestKit 后看不到我的 AFHTTPRequestOperationManager 类