没有已知的选择器混淆类方法
Posted
技术标签:
【中文标题】没有已知的选择器混淆类方法【英文标题】:no known class method for selector confusion 【发布时间】:2012-10-18 14:13:42 【问题描述】:我知道这是一个新手问题,但我很困惑。我应该如何从另一个类调用类方法,还是不应该?
这是我的ClassA
和CoreDataHelper
:
#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];
【讨论】:
以上是关于没有已知的选择器混淆类方法的主要内容,如果未能解决你的问题,请参考以下文章
选择器'circleOfButtons:buttonSize:radius:'没有已知的类方法
错误:选择器“isPedometerEventTrackingAvailable”没有已知的类方法
选择器'application:openURL:options:sourceApplication:annotation'没有已知的类方法