//MigrationVC.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface MigrationVC : UIViewController
@end
//MigrationVC.m
#import "MigrationVC.h"
@interface MigrationVC()
@property (strong, nonatomic) IBOutlet UILabel *label;
@property (strong, nonatomic) IBOutlet UIProgressView *progressView;
@end
@implementation MigrationVC
@end
//CoreData
#import "CoreData.h"
#import "MigrationVC.h"
@interface CoreData()
@property (nonatomic,retain) MigrationVC *migrationVC;
@end
-(void)obsererForKeyPath:(NSString*)keyPath object:(id)object change:(NSDictionary*)change context:(void*)context
{
if([keyPath isEqualToString:@"migrationProgress"])
{
dispatch_async(dispatch_get_main_queue(),^{
float progress=[[change objectForKey:NSKeyValueChangeNewKey] floatValue];
self.migrationVC.progress=progress;
});
}
}
我正在尝试学习CoreData和迁移,但这让我很头疼。
我正在尝试从其他类访问outlet属性但总是给出红色警告(在MigrationVC *类型的对象上找不到属性'标签'。
我尝试在.h文件中添加一个可访问的NSString属性但是当我尝试将插件从.m更改为.h文件时,我无法按住Ctrl键并拖动.h文件中的视图。
我从未遇到过这个问题。我过去曾多次从.m文件访问过,但它现在只是给我警告。 如何在.m文件中插入时访问属性?
我无法在.h文件中输出属性。
答案 0 :(得分:3)
您必须将插座属性从.m
文件转移到.h
文件(复制和粘贴)。如果您希望您的属性是公共的,那么必须在头文件中声明它们。如果您希望它们是私有的 - 在实现文件中声明它们。
//MigrationVC.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface MigrationVC : UIViewController
@property (strong, nonatomic) IBOutlet UILabel *label;
@property (strong, nonatomic) IBOutlet UIProgressView *progressView;
@end
//MigrationVC.m
#import "MigrationVC.h"
@interface MigrationVC()
@end
@implementation MigrationVC
@end
答案 1 :(得分:3)
正如其他人所指出的那样,如果您希望可以从其他类访问它们,则需要在头文件中声明属性。你可以,你应该。如果您认为自己无法做到这一点,请解释原因。
但是,更重要的是,你不应该做你想做的事情。您不应尝试从视图控制器外部访问视图控制器的视图对象。这违反了封装原则,这是面向对象设计的一个重要原则。 (这意味着视图控制器之外的代码取决于视图控制器的外观。如果您以后决定对视图控制器进行内部更改,则很可能会破坏外部代码。)除了有点抽象的& #34;设计糟糕&#34;不这样做的原因,往往不起作用,因为在尝试修改视图控制器的视图时,它们还不存在。相反,您应该在视图控制器中创建 DATA 属性(如字符串或浮点进度值)并公开它们。然后让您的视图控制器的viewWillAppear方法根据需要将数据安装到其视图中。这样,数据属性就成为视图控制器公共合同的一部分,而不依赖于视图控制器的内部细节。
答案 2 :(得分:1)
您的属性在私有类别中声明,因此对于其他类不可见。只有头文件中声明的属性才可见。
答案 3 :(得分:1)
在CoreData.m中,您的MigrationVC设置为retain。我不知道你是否可以在ARC使用它。
@property (nonatomic,retain) MigrationVC *migrationVC;
应该是
@property (nonatomic,strong) MigrationVC *migrationVC;
在MigrationVC
outlets
weak
strong
CoreData.m
而非/%postname%/
和.h可以从 Year Value
-----------------
2013 -0.0016
2014 -0.0001
2015 0.0025
2016 -0.0003
2017 0.0023
2018 0.0002