如何将NSData作为@property处理

时间:2016-01-29 23:34:16

标签: objective-c properties

我试图让@property使用NSData,以便它可用于类中的所有方法。

我已经设置了一个小测试项目来帮助我调试问题。

我的main.m

FxPlug *data = [[FxPlug alloc] init];  
[FxPlug makeCube];  
NSLog (@"%@",[FxPlug.cubeData]);  

并且在班级FxPlug.h

#import <Foundation/Foundation.h>
@interface FxPlug : NSObject
@property NSData *cubeData;
+(void) makeCube;
@end

FxPlug.m

#import "FxPlug.h"
@implementation FxPlug

+ (void) makeCube; {
NSString *filePath = @"/Development/testNSDataProperty/test_cube_data.dat";
NSData *cubeData = [[NSData alloc] initWithContentsOfFile:filePath];
}
@end

所以这只是一个测试,看看我是否可以将类@property NSData *cubeData;中的FxPlug设置为文件的内容,并查看它是否被传递回main.m类到NSLog到终点站。

我真的很感激一些帮助。

基本上,我试图在类之间传递NSData对象。

非常感谢!

因为我的主项目是一个FxPlug,它基本上只是一个大类,有大量专门为主机app命名的方法。所以我需要为现有的类添加一个新的类方法来处理NSData对象。或者至少我认为它是如何工作的!

1 个答案:

答案 0 :(得分:0)

如果要使用属性,则必须使用并创建类实例并避免使用类方法,因此:

FxPlug.h:

#import <Foundation/Foundation.h>
@interface FxPlug : NSObject
@property NSData *cubeData;
-(void) makeCube;
@end

FxPlug.m:

#import "FxPlug.h"
@implementation FxPlug

- (void) makeCube {
    NSString *filePath = @"/Development/testNSDataProperty/test_cube_data.dat";
    self.cubeData = [[NSData alloc] initWithContentsOfFile:filePath];
}
@end

的main.m:

FxPlug *data = [[FxPlug alloc] init];  
[data makeCube];  
NSLog (@"%@", data.cubeData);

可以使用类方法和类级变量来完成,但不能使用@property。一个中途的房子是使用单例模式,你只允许任何一个类的一个实例存在。

编辑:如果您想将其作为静态类(不推荐),则代码如下:

FxPlug.h:

#import <Foundation/Foundation.h>
@interface FxPlug : NSObject
+ (NSData *)cubeData;
+ (void)setCubeData:(NSData *)cubeData;
+ (void) makeCube;
@end

FxPlug.m:

#import "FxPlug.h"

static NSData *_cubeData = nil;

@implementation FxPlug

+ (NSData *)cubeData
{
    return _cubeData;
}

+ (void)setCubeData:(NSData *)cubeData
{
    _cubeData = cubeData;
}

+ (void) makeCube {
    NSString *filePath = @"/Development/testNSDataProperty/test_cube_data.dat";
    _cubeData = [[NSData alloc] initWithContentsOfFile:filePath];
}
@end

的main.m:

[FxPlug makeCube];  
NSLog (@"%@", [FxPlug cubeData]);