Tyl*_*aff 1 properties objective-c ios
在viewDidLoad()下面,设置我的财产self.textToAnalyze在结果property之中nil在调试器,而直接设置属性使用_textToAnalyze表明,该属性不再为零.为什么是这样?
//
// TextStatsViewController.m
// colorSwitcher
#import "TextStatsViewController.h"
@interface TextStatsViewController ()
@property (weak, nonatomic) IBOutlet UILabel *colorfulCharactersLabel;
@property (weak, nonatomic) IBOutlet UILabel *outlinedCharactersLabel;
@end
@implementation TextStatsViewController
-(void)setTextToAnalyze:(NSAttributedString *)textToAnalyze
{
}
-(void)viewDidLoad
{
_textToAnalyze=[[NSAttributedString alloc] initWithString:@"test" attributes:@{NSForegroundColorAttributeName : [UIColor greenColor],NSStrokeWidthAttributeName :@-3}]; //setting it here with the underscore shows that this property is not nil in the debugger
//self.textToAnalyze=[[NSAttributedString alloc] initWithString:@"test" attributes:@{NSForegroundColorAttributeName : [UIColor greenColor],NSStrokeWidthAttributeName :@-3}]; //setting it here with the accessor shows that this property is nil in the debugger
}
-(void)updateUI
{
self.colorfulCharactersLabel.text =[NSString stringWithFormat:@"%d colorful characters",[[self charactersWithAttribute:NSForegroundColorAttributeName] length]];
self.outlinedCharactersLabel.text =[NSString stringWithFormat:@"%d outlined characters",[[self charactersWithAttribute:NSStrokeWidthAttributeName] length]];
}
-(NSAttributedString *)charactersWithAttribute:(NSString *)attributeName
{
int index=0;
NSMutableAttributedString* characters=[[NSMutableAttributedString alloc] init];
while(index < [self.textToAnalyze length])
{
NSRange range;
id value = [self.textToAnalyze attribute:attributeName atIndex:index effectiveRange:&range];
if(value)
{
[characters appendAttributedString:[self.textToAnalyze attributedSubstringFromRange:range]];
index=range.location+range.length;
}else{
index++;
}
}
return characters;
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self updateUI];
}
@end
//
// TextStatsViewController.h
// colorSwitcher
#import <UIKit/UIKit.h>
@interface TextStatsViewController : UIViewController
@property (nonatomic,strong)NSAttributedString* textToAnalyze;
@end
Run Code Online (Sandbox Code Playgroud)
因为你有一个空的二传手.
-(void)setTextToAnalyze:(NSAttributedString *)textToAnalyze
{
}
Run Code Online (Sandbox Code Playgroud)
当你这样self.textToAnalyze = something做时[self setTextToAnalyze:something],所以实例变量永远不会被设置.
像这样更改自定义实现:
-(void)setTextToAnalyze:(NSAttributedString *)textToAnalyze
{
_textToAnalyze = textToAnalyze;
}
Run Code Online (Sandbox Code Playgroud)
或者只是删除它,假设您已textToAnalyze在.h文件中声明为@property:
@property (nonatomic) NSAttributedString *textToAnalyze;
Run Code Online (Sandbox Code Playgroud)
(此外,如果您希望保留传递的值,则属性必须很强)
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |