2016-10-10 11 views
0

Ich möchte einen NSString Wert an eine Klassenmethode einer NSObject-Klasse übergeben: +(void)loadTableData:(myCompletion) compblock;. Ich kann also nur eine Klassenvariable NSString *categoryID für die Verwendung in der Klassenmethode verwenden. Ich erkläre es in der .h Datei, die versucht, es auch für den öffentlichen Zugang verwenden zu lassen. Aber ich habe viele Möglichkeiten ausprobiert, und kann es nur wie unten erklären. Andere Positionen werden mich warnen.Wie Zugriff auf NSObject-Klasse/Instanzvariable von View-Controllern?

#import <Foundation/Foundation.h> 

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

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

Dann ist das Problem Ich bin nach wie vor nicht in der Lage in der Steuerung meiner Sicht Klasse zuzugreifen. Die Fehlermeldung lautet immer: Die Eigenschaft "categoryID" wurde nicht am Objekt vom Typ "ThirdVCLoadTable" gefunden, egal was ich versuche, um auf die zuzugreifen.

Zum Beispiel

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

Sie deklarieren müssen in .h-Datei Eigenschaft Zeichenfolge verwenden. @property (nicht atomar, stark) NSString * categoryID; – KKRocks

+0

@Chenya Zhang Überprüfen Sie meine Antwort –

Antwort

0

Es ist nicht eine Eigenschaft der Klasse. Versuchen

@property (copy, nonatomic) NSString * categoryID; 

unter @interface

+0

Aber ich kann es nicht direkt in einer ** Klassenmethode ** in der .m-Datei verwenden, wenn es eine Eigenschaft ist. –

+0

Das ist nicht ganz so, wie Sie mit Klassenvariable in Objective-C umgehen. Siehe: http://stackoverflow.com/questions/695980/how-doi-i-clare-class-level-properties-in-objective-c#696024 – PeejWeej

0

Deklarieren Sie eine Eigenschaft in dieser Klasse setzen, die Sie später aus einer anderen Ansicht nennen.

Angenommen, in viewcontrollerA, in .h

@property (Kopieren, nonatomic) NSString * StrName;

In viewcontrollerB, implementieren sie mag:

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

mehr Hilfe von diesem erhalten:

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

Passing Data between View Controllers

+0

Aber ich möchte den NSString direkt in einer ** Klasse-Methode verwenden ** in der NSObject.m-Datei, wie ich in dem Problem oben beschrieben habe. –

+1

Sie haben zwei separate Klasse/Viewcontroller, oder? Bearbeiten Sie die Frage mit weiteren Informationen. Füge Codes aus beiden Klassen ein. –

0

Schritt 1: nehme meine Klassenname Info ist.

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 Datei

+ (void)loadTableData:(myCompletion) compblock { 

} 

, wenn Sie in Viewcontrollers Klasse Methode zugreifen möchten als können Sie wie

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