Ios 对于';没有可见的@界面;二进制文件读取器';声明选择器';initWithLocation:&x27;
我遇到了一个错误: “BinaryFileReader”没有可见的@interface声明选择器“initWithLocation:” 对于以下方法中在BinaryFileReader上调用的每个方法Ios 对于';没有可见的@界面;二进制文件读取器';声明选择器';initWithLocation:&x27;,ios,objective-c,file-io,Ios,Objective C,File Io,我遇到了一个错误: “BinaryFileReader”没有可见的@interface声明选择器“initWithLocation:” 对于以下方法中在BinaryFileReader上调用的每个方法 + (Item*)loadItem:(NSString*)filepath { Item* newItem = [[Item alloc] init]; BinaryFileReader* input = [[BinaryFileReader alloc] initWithLocation
+ (Item*)loadItem:(NSString*)filepath {
Item* newItem = [[Item alloc] init];
BinaryFileReader* input = [[BinaryFileReader alloc] initWithLocation:filepath];
[newItem setName:[input readNSString]];
[newItem setOtherNames:[input readNSMutableArrayOfNSString]];
[newItem setDescription:[input readNSString]];
[newItem setXactCode:[input readNSString]];
[newItem setSymbilityCode:[input readNSString]];
[newItem setAverageLowPrice:[input readInt]];
[newItem setAverageHighPrice:[input readInt]];
[newItem setAverageLifeExpectancy:[input readInt]];
return newItem;
}
这是我的BinaryFileReader.m:
#import "BinaryFileReader.h"
@implementation BinaryFileReader
- (id)init {
self = [super init];
return self;
}
- (id)initWithLocation:(NSString*)filepath {
if ((self = [super init])) {
_file = [NSFileHandle fileHandleForReadingAtPath:filepath];
_fileOffset = 0;
if (_file == nil)
NSLog(@"%@%@",@"Failed to open file at path:",filepath);
}
return self;
}
- (void)close {
[_file closeFile];
}
- (int)readInt {
[_file seekToFileOffset:_fileOffset];
_databuffer = [_file readDataOfLength:4];
_fileOffset+=4;
return (*(int*)([_databuffer bytes]));
}
- (NSString*)readNSString {
int length = [self readInt];
[_file seekToFileOffset:_fileOffset];
_databuffer = [_file readDataOfLength:length];
_fileOffset+=length;
return [[NSString alloc] initWithData:_databuffer encoding:NSUTF8StringEncoding];
}
- (NSMutableArray*)readNSMutableArrayOfNSString {
NSMutableArray* array = [[NSMutableArray alloc] init];
int arrayLength = [self readInt];
int length;
for (int i=0; i<arrayLength; i++) {
length = [self readInt];
[_file seekToFileOffset:_fileOffset];
_databuffer = [_file readDataOfLength:length];
_fileOffset+=length;
[array addObject:[[NSString alloc] initWithData:_databuffer encoding:NSUTF8StringEncoding]];
}
return array;
}
@end
我不明白我为什么会有这个问题。如果您能帮我澄清,我将不胜感激。我将您问题中的代码复制粘贴到我的一个项目中。预期结果:一切正常。所以问题肯定不是你的代码 回到另一个
BinaryFileReader.h
污染导入的想法:您在项目中使用过任何第三方库吗?如果是,其中一个可能会意外地提供一个BinaryFileReader.h
文件
尝试以下操作:将
BinaryFileReader.h
重命名为其他名称,例如Foo.h
。同时将BinaryFileReader.m
中的#导入更改为使用Foo.h
,但将#导入保留在loadItem:
方法所在的文件中,以便它仍然使用BinaryFileReader.h
。现在再次编译。编译器现在应该抱怨找不到BinaryFileReader.h
。如果错误仍然与缺少选择器有关,那么您知道在某个地方出现了意外的BinaryFileReader.h
使您的项目一团糟。我不知道这是否是个问题,但是为什么您的init方法的返回类型是id
?因为它是。忘记在触发错误的文件中包含BinaryFileReader头了?我看不出您发布的代码有任何问题。发布整个文件可能会有用。我确实发布了所有内容。。。您的意思是发布+(Item*)loadItem所属的文件吗?还要揭穿语句“忘记包含BinaryFileReader头,我有#import”BinaryFileReader.h“它确实抱怨BinaryFileReader.h不存在。@我必须承认失败。我能给出的唯一其他建议是:复制你的项目,删除所有内容,除了涉及的3个文件。如果这个超简约的项目仍然存在编译器错误,那么你可以将这个迷你项目上传到某个地方让我们看看。好的,那么。。。我把它修好了……差不多。我所做的是,在重命名它之后,我将#import in Item.m从#import BinaryFileReader.h更改为#import Foo.h,并将所有对Foo的引用。。。然后我跑过去,很好地遵守了它。“BinaryFileReader”这个名字显然有问题,对吧?这正是我所想的,但在将所有内容从Foo更改回BinaryFileReader后,它工作得很好。总结-我不知道这个幻影错误是关于什么的,它让我一天的工作落后了1/2,但是@Herzube你给了我最终导致解决方案的答案,所以这里有最好的答案。@Hoodai确实很奇怪。不知何故,Xcode或其他Xcode一定缓存了一个旧版本的BinaryFileReader.h
,但它是如何缓存的(预编译头?)我无法理解。很高兴听到你现在回到了正轨,谢谢你接受了答案。
@interface BinaryFileReader : NSObject
@property (nonatomic) int fileOffset;
@property (nonatomic, retain) NSData* databuffer;
@property (nonatomic, retain) NSFileHandle* file;
- (id)init;
- (id)initWithLocation:(NSString*)filepath;
- (void)close;
- (int)readInt;
- (NSString*)readNSString;
- (NSMutableArray*)readNSMutableArrayOfNSString;
@end