没有已知的选择器混淆类方法

Posted

技术标签:

【中文标题】没有已知的选择器混淆类方法【英文标题】:no known class method for selector confusion 【发布时间】:2012-10-18 14:13:42 【问题描述】:

我知道这是一个新手问题,但我很困惑。我应该如何从另一个类调用类方法,还是不应该?

这是我的ClassACoreDataHelper

#import <Foundation/Foundation.h>

@interface ClassA : NSObject 



@property (nonatomic, retain) NSString * sessionId;
@property (nonatomic, retain) NSString * token;
@property (nonatomic, retain) NSString * userid;

+ (void) pullOfflineDataWithContext:(NSManagedObjectContext *)managedObjectContext ;
@end


#import "ClassA.h"
#import "CoreDataHelper.h"

@implementation ClassA


+ (void) pullOfflineDataWithContext:(NSManagedObjectContext *)managedObjectContext  

    // get Contacts, Accounts, Meetings into Core Data

     bool asd =[CoreDataHelper insertAllObjectsForEntity:@"Contact" andContext:managedObjectContext initCoreData:jsonDict];


@end

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@interface CoreDataHelper : NSObject

//For inserting objects
+(BOOL)insertAllObjectsForEntity:(NSString*)entityName andContext:(NSManagedObjectContext *)managedObjectContext;

@end

【问题讨论】:

【参考方案1】:

您正在以正确的方式从另一个类中调用一个类方法,只是方法签名与声明的不同;

bool asd =[CoreDataHelper insertAllObjectsForEntity:@"Contact" 
                                         andContext:managedObjectContext 
                                       initCoreData:jsonDict];

上面调用代码中+insertAllObjectsForEntity:andContext:的声明没有最后一个

+(BOOL)insertAllObjectsForEntity:(NSString*)entityName 
                      andContext:(NSManagedObjectContext *)managedObjectContext;

【讨论】:

但编译器不应该警告我“选择器没有已知的类方法” @tugce 好吧,实际上编译器根据 Objective-C 规则是正确的: +insertAllObjectsForEntity:andContext:initCoreData: 生成一个完整的方法签名,与 C 中的“符号”语义非常相似。【参考方案2】:

喜欢:

[ClassName method];

代替:

[instance method];

在你的例子中是这样的:

[ClassA pullOfflineDataWithContext];

【讨论】:

以上是关于没有已知的选择器混淆类方法的主要内容,如果未能解决你的问题,请参考以下文章

错误“选择器“canSendTweet”没有已知的类方法

选择器'circleOfButtons:buttonSize:radius:'没有已知的类方法

错误:选择器“isPedometerEventTrackingAvailable”没有已知的类方法

选择器'application:openURL:options:sourceApplication:annotation'没有已知的类方法

错误:选择器“setScreenName:screenClass:”没有已知的类方法

使用 PushNotificationIOS 时没有已知的选择器类方法