Objective-C:将用户输入与对象的实例变量

时间:2015-07-05 12:56:20

标签: objective-c arrays nsstring command-line-interface

我已经学习了Objective-C一段时间了,我决定尝试接受一个更大的项目而没有学习书中的任何真正的“指导”,但现在我已经卡住了。

我正在尝试通过为这些文档创建可搜索的命令行工具来帮助朋友将他拥有的一些文档数字化。

我想我已经走得很远了,我为三个变量的文档创建了一个自定义类;作者姓名,文章编号和计算机上文件的路径(我当然会将其更改为他将文档存储在计算机上的位置)。然后我创建了两个填写了所有变量的示例文档。由于文档有两个属性,作者的数字和名称,用户可以搜索其中一个属性。因此,我将用户的输入分为字符串或int(在堆栈溢出的帮助下:How to determine if the first character of a NSString is a letter)我还创建了一个包含不同文档的'author'-variable的数组。

这是我遇到的问题:我想要浏览'author'的数组,如果作者的名字与用户输入的内容相匹配,它将打开文件,该文件位于给定的路径上'UrlToDoc'。问题是,实例变量'UrlToDoc'没有以某种方式“连接”到'leadAuthor'变量(据我所知)。因此,我的问题是,在我在数组中找到用户编写的匹配后,如何描述该特定对象的'UrlToDoc'变量? (例如,如果用户输入jamesson,如何使用值描述UrlToDoc变量:/Users/pinkRobot435/Desktop/test1.pdf)

此外,如果用户写入一个数字,则应使用底部的else语句(这将做同样的事情)。我还没有写它,但我想在描述'UrlToDoc'变量时它的代码几乎是一样的。

这是我的代码:

我的自定义类SMADoc:

SMADoc.h

#import <Foundation/Foundation.h>

@interface SMADoc : NSObject

//Two strings, and a pathway to the documnt, with the purpose of describing the document
@property (nonatomic) int number;
@property (nonatomic) NSString *authour;
@property (nonatomic) NSString *urlToDoc;

@end

SMADoc.m

#import "SMADoc.h"

@implementation SMADoc

@end

的main.m

#import <Foundation/Foundation.h>
#import "SMADoc.h"
#include <readline/readline.h>
#include <stdlib.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        SMADoc *one = [[SMADoc alloc] init];
        [one setnumber:123];
        [one setauthour:@"jamesson"];
        [one setUrlToDoc:@"/Users/pinkRobot435/Desktop/test1.pdf"];

        SMADoc *two = [[SMADoc alloc] init];
        [two setnumber:124];
        [two setauthour:@"marc"];
        [two setUrlToDoc:@"/Users/pinkRobot435/Desktop/test2.pdf"];

        NSMutableArray *authours = [[NSMutableArray alloc] initWithObjects: [one authour], [two authour], nil];

        NSLog(@"Enter what you want to search for: ");
        const char *searchC = readline(NULL);
        NSString *searchOrg = [NSString stringWithUTF8String:searchC];
        NSString *search = [searchOrg lowercaseString];

        NSRange first = [search rangeOfComposedCharacterSequenceAtIndex:0];
        NSRange match = [search rangeOfCharacterFromSet:[NSCharacterSet letterCharacterSet] options:0 range:first];
        if (match.location != NSNotFound) {
            //The string starts with a letter and the array of authour names should be searched through
            for (SMADoc *nSearch in authours) {
                if ([search isEqualToString:nSearch]) {
                    **//Open the file that is represented by UrlToDoc for that specific object**
                } else {
                    NSLog(@"The authour was not found, please try again");
                }
            }
        } else {
            //The string starts with a number and should be converted to an int and then the array of numbers (which I have not yet created) should be searched through
            int number = atoi(searchC);
        }

    }
    return 0;
}

谢谢!

1 个答案:

答案 0 :(得分:0)

创建一个authours个对象,而不是SMADoc数组。 然后,在您的循环中,数组中的每个对象都将具有您可以匹配的authournumber。找到正确的对象后,您可以从同一个对象中选择urlToDoc

目前,当您检查数组时,您将调用数组中的每个对象SMADoc *,但这是错误的。您创建了一个NSString *数组(并且您正确地将其作为字符串进行比较),但您需要的是真实 SMADoc *