Ios 来自NSData的文件路径

Ios 来自NSData的文件路径,ios,cocoa,nsdata,Ios,Cocoa,Nsdata,我有从文件路径加载的NSData。然后数据被传递,我需要数据来源的文件路径 除了将filePath作为一个额外参数传递之外,最简单的方法是什么?将这两种方法都包装在表示文件的容器对象中,例如 @interface File : NSObject @property (strong) NSData *fileContents; @property (copy) NSString *filePath; // perhaps, even a nice constructor to fill the

我有从文件路径加载的NSData。然后数据被传递,我需要数据来源的文件路径


除了将filePath作为一个额外参数传递之外,最简单的方法是什么?

将这两种方法都包装在表示文件的容器对象中,例如

@interface File : NSObject

@property (strong) NSData *fileContents;
@property (copy) NSString *filePath;

// perhaps, even a nice constructor to fill these properties
- (id)initWithFilePath:(NSString *)filePath;

@end

将两者包装在表示文件的容器对象中,例如

@interface File : NSObject

@property (strong) NSData *fileContents;
@property (copy) NSString *filePath;

// perhaps, even a nice constructor to fill these properties
- (id)initWithFilePath:(NSString *)filePath;

@end

虽然您可能应该创建包含所需数据的单独结构或类,但也可以向NSData添加关联

为了方便,您甚至可以将其作为NSData上的一个类别来执行。。。假设您正在使用字符串。。。如果使用URL,请使用NSURL。。。这样,您的其他代码都不需要更改。。。您仍然可以像以前一样使用NSData,使用新添加的属性

注意:使用或不使用类别有很多原因。我假设您将根据您的代码情况做出最佳选择,并将关于类别的好/坏使用的争论推迟给其他人

试试这样的

NSData+AssociatedFilePath.h

#import <Foundation/Foundation.h>

@interface NSData (AssociatedFilePath)
@property (nonatomic, strong) NSString *filePath;
@end
每当需要NSData对象的文件路径时

NSString *filePath = myNSDataObject.filePath;
由于它是一个类别,您可以在任何NSData对象上使用它,如果从未设置文件路径,它将只返回nil


这是一个通用的解决方案,适用于任何需要向现有类添加行为的时候,当然要遵循最佳使用类别的适当实践。

虽然您可能应该创建一个包含所需数据的单独结构或类,但您也可以向NSData添加关联

为了方便,您甚至可以将其作为NSData上的一个类别来执行。。。假设您正在使用字符串。。。如果使用URL,请使用NSURL。。。这样,您的其他代码都不需要更改。。。您仍然可以像以前一样使用NSData,使用新添加的属性

注意:使用或不使用类别有很多原因。我假设您将根据您的代码情况做出最佳选择,并将关于类别的好/坏使用的争论推迟给其他人

试试这样的

NSData+AssociatedFilePath.h

#import <Foundation/Foundation.h>

@interface NSData (AssociatedFilePath)
@property (nonatomic, strong) NSString *filePath;
@end
每当需要NSData对象的文件路径时

NSString *filePath = myNSDataObject.filePath;
由于它是一个类别,您可以在任何NSData对象上使用它,如果从未设置文件路径,它将只返回nil


这是一个通用的解决方案,适用于任何需要向现有类添加行为的时候,当然,要遵循最佳使用类别的适当实践。

虽然这是一种有效的方法,并且可以很好地使用新的关联对象运行时调用,但我认为您应该只在确实需要时才这样做,它不是特别优雅。一个简单的容器类,比如@joerick建议的容器类,在这里更合适,它是封装模型对象的一种更好的方法,并且有利于代码的维护。虽然这是一种有效的方法,并且很好地利用了新的关联对象运行时调用,但我认为您应该只在确实需要的时候才这样做,它不是特别优雅。一个简单的容器类,比如@joerick建议的容器类,在这里更合适,它是封装模型对象的一种更好的方法,并且有利于代码的维护。