【问题标题】:How to access NSObject class/instance variable from view controllers?如何从视图控制器访问 NSObject 类/实例变量?
【发布时间】:2017-02-18 11:32:43
【问题描述】:

我想将 NSString 值传递给 NSObject 类的类方法:+(void)loadTableData:(myCompletion) compblock;。所以我只能使用一个类变量NSString *categoryID在类方法中使用。我在 .h 文件中声明它,试图让它也用于公共访问。但是我尝试了很多方法,只能像下面这样声明。其他职位会给我警告。

#import <Foundation/Foundation.h>

typedef void(^myCompletion)(NSArray *);
NSString *categoryID;

@interface ThirdVCLoadTable : NSObject
+ (void)loadTableData:(myCompletion) compblock;
@end

那么问题是我仍然无法在我的视图控制器类中访问它。错误消息始终是:在“ThirdVCLoadTable”类型的对象上找不到属性“categoryID”,无论我如何尝试访问NSString *categoryID

例如,

ThirdVCLoadTable *load = [[ThirdVCLoadTable alloc] init];
load.categoryID = [NSString stringWithFormat:@"%li", (long)indexPath.row + 1];

【问题讨论】:

  • 你需要在.h文件中声明字符串的属性。@property (nonatomic,strong)NSString *categoryID;
  • @Chenya Zhang 检查我的答案

标签: ios objective-c class-method class-variables


【解决方案1】:

第 1 步: 假设我的 ClassName 是 Info。

Info.h file

@interface Info : NSObject
typedef void(^myCompletion)(NSArray *);

@end
@interface ThirdVCLoadTable : NSObject

@property (strong, nonatomic) NSString * categoryID;

+ (void)loadTableData:(myCompletion) compblock;

Info.m 文件

+ (void)loadTableData:(myCompletion) compblock {

}

如果你想在 viewControllers 中访问 Class Method 比 你可以像这样使用

ThirdVCLoadTable* load = [[ThirdVCLoadTable alloc] init];
load.categoryID = [NSString stringWithFormat:@"%li", (long)indexPath.row + 1];

【讨论】:

    【解决方案2】:

    在该类中声明一个属性,稍后您将从另一个视图调用该属性。

    假设,在 viewcontrollerA 中,在 .h 中

    @property (copy, nonatomic) NSString * StrName;

    在 viewcontrollerB 中,像这样实现它:

    viewcontrollerA *vc = [[viewcontrollerA alloc]    initWithNib:@"viewcontrollerA" bundle:nil];
    vc.StrName = @"XYZ";
    [self pushViewController:vc animated:YES];
    

    从此获得更多帮助:

    How to use NSString from NSObject class in multiple Classes (View Controllers)

    Passing Data between View Controllers

    【讨论】:

    • 但是我想直接使用NSObject的.m文件中的类方法中的NSString,就像我在上面的问题中描述的那样。
    • 你有两个独立的类/视图控制器,对吧?用更多信息编辑问题。粘贴两个类的代码。
    【解决方案3】:

    它不是类的属性。试试放

    @property (copy, nonatomic) NSString * categoryID;
    

    @interface 下方

    【讨论】:

    • 但是如果它是一个属性,我不能直接在.m文件中的类方法中使用它。
    • 这不是您在 Objective-C 中处理类变量的方式。见:stackoverflow.com/questions/695980/…
    猜你喜欢
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多