У меня есть опыт разработки на Java и Android, и сейчас я пытаюсь изучить разработку на Objective-C и iPhone/iPad. Чтобы помочь себе в обучении, я переписываю приложение, которое я сделал для Android, на iPhone.
Конкретная проблема, с которой я столкнулся, связана с использованием класса NSScanner. В моем приложении для Android я читаю текстовый файл (с несколькими строками) и создаю объекты-члены, которые загружаются в массив. У каждого участника есть общая контактная информация: имя, фамилия, номер телефона, электронная почта, класс залога и специальность. Этот текстовый файл был написан мной, поэтому я знаю точное форматирование. Ниже приведен пример одной строки в текстовом файле.
Fawzy Jake 8144425471 [email protected] Beta Criminal Justice & Psych Minor
В Java/android я смог загрузить желаемые результаты, используя несколько scan.Next(), а затем scan.nextLine() для основного. Может ли кто-нибудь помочь указать мне правильное направление, как использовать NSScanner/objective-c для выполнения аналогичной операции? В частности, я хотел бы знать, как правильно сканировать текстовый файл/строку, а затем создавать свой объект-член с информацией, которую я получил из строки.
Ниже приведен пример моего кода, над которым я работал, но у меня возникли проблемы с логическим выводом того, что я хочу сделать, в синтаксис, поскольку я не знаком с target-c.
- (NSString *)loadFileToString{
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"akpsi_contact_list"
ofType:@"txt"];
NSError *error = nil;
NSString *fileContent = [NSString stringWithContentsOfFile:filePath
encoding:NSUTF8StringEncoding
error:&error];
if(error)
{
NSLog(@"ERROR while loading from file: %@", error);
}
return fileContent;
}
-(void)readFileString{
NSScanner *scanner = [NSScanner scannerWithString: self.loadFileToString];
while ([scanner isAtEnd] == NO) {
//member object
AKPsiMember *member;
//temporary variables
NSString *thisFirstName;
NSString *thisLastName;
NSString *thisPhoneNum;
NSString *thisEmail;
NSString *thisPledge;
NSString *thisMajor;
//scan one line, save
[scanner scanUpToString:@" " intoString:&thisFirstName];
[scanner scanUpToString:@" " intoString:&thisLastName];
[scanner scanUpToString:@" " intoString:&thisPhoneNum];
[scanner scanUpToString:@" " intoString:&thisEmail];
[scanner scanUpToString:@" " intoString:&thisPledge];
[scanner scanUpToString:@" " intoString:&thisMajor];
//build member object with temporary variables
// implementation must continue to next line...
}
}
Также мой объект-член/класс
.h
@interface AKPsiMember : NSObject{
NSString *firstName;
NSString *lastName;
NSString *emailAddress;
NSString *pledgeClass;
NSString *major;
NSString *phoneNum;
}
@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;
@property (nonatomic, strong) NSString *emailAddress;
@property (nonatomic, strong) NSString *pledgeClass;
@property (nonatomic, strong) NSString *major;
@property (nonatomic, strong) NSString *phoneNum;
@end
И мой .м
@implementation AKPsiMember
@synthesize firstName = _firstName;
@synthesize lastName = _lastName;
@synthesize phoneNum = _phoneNum;
@synthesize emailAddress = _emailAddress;
@synthesize pledgeClass = _pledgeClass;
@synthesize major = _major;
- (NSString *)phoneNum:(NSNumber *)num
{
if(num == 0)
{
NSString *temp1 = [self.phoneNum substringWithRange:NSMakeRange(0, 3)];
NSString *temp2 = [self.phoneNum substringWithRange:NSMakeRange(3, 6)];
NSString *temp3 = [self.phoneNum substringWithRange:NSMakeRange(6, 9)];
NSString *formatNum = [NSString stringWithFormat: @"(%@) %@-%@", temp1, temp2, temp3];
return formatNum;
}
else{
return self.phoneNum;
}
}
@end