物业'水平完成'在#id; id'类型的对象上找不到

时间:2016-06-18 21:50:44

标签: ios objective-c xcode properties

这是我的模特课LevelInformationModel

     @interface LevelInformationModel : NSObject

     @property NSInteger levelCompleted;
     +(id)sharedModel;

     @end


     #import "LevelInformationModel.h"

     @implementation LevelInformationModel

     @synthesize levelCompleted;

     /* Return singleton model */
     + (id)sharedModel {
         static LevelInformationModel *sharedModel = nil;
         static dispatch_once_t onceToken;
         dispatch_once(&onceToken, ^{
             sharedModel = [[self alloc] init];
         });
         return sharedModel;
     }

     - (id)init {
        self = [super init];
        if (self) {
            self.levelCompleted = 0;
        }
        return self;
     }

     @end

以下是我如何全部使用它(在GameViewController类中)。我已导入LevelInformationModel.h

     NSInteger currentLevel = [LevelInformationModel sharedModel].levelCompleted;

但在levelCompleted属性之上是错误Property 'levelCompleted在类型' id'`上找不到。任何想法都会很棒。

2 个答案:

答案 0 :(得分:2)

那是因为你的方法正在返回一个id。

将其更改为此

var assembly = AssemblyDefinition.ReadAssembly(inputPath);

var module = assembly.MainModule;

var sorted = module.Types.OrderBy(t => t.FullName).ToList();

module.Types.Clear();

foreach (var type in sorted)
{
    module.Types.Add(type);
}

assembly.Write(outputPath);

答案 1 :(得分:0)

你应该使用 +(instancetype)sharedModel;

"肯定有一个好处。当您使用' id'时,您基本上不会进行任何类型检查。使用instancetype,编译器和IDE知道返回的是什么类型的东西,并且可以更好地检查代码并更好地自动完成。"

Would it be beneficial to begin using instancetype instead of id?

https://developer.apple.com/library/ios/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html