Ios 将字符串除以特定字符

Ios 将字符串除以特定字符,ios,objective-c,Ios,Objective C,我正在制作一个帮助学生学习的应用程序,但我遇到了麻烦。该应用程序允许你在其他事情之间做笔记,但我需要帮助才能使我的代码正常工作。我试图用一个特定的字符将一个NSString划分为to,例如用户在便笺中写道“海豚:与鲸类哺乳动物关系密切…”我需要应用程序识别该字符:以及左侧需要保存以供以后使用的部分,作为一个变量和右边的部分,但作为一个不同的变量,我可以稍后使用它们。 现在我就是这样做的 NSArray *card = [_argumentTextView.text componentsSepar

我正在制作一个帮助学生学习的应用程序,但我遇到了麻烦。该应用程序允许你在其他事情之间做笔记,但我需要帮助才能使我的代码正常工作。我试图用一个特定的字符将一个
NSString
划分为to,例如用户在便笺中写道“海豚:与鲸类哺乳动物关系密切…”我需要应用程序识别该字符:以及左侧需要保存以供以后使用的部分,作为一个变量和右边的部分,但作为一个不同的变量,我可以稍后使用它们。 现在我就是这样做的

NSArray *card = [_argumentTextView.text componentsSeparatedByString:@":"]; 

QueRes *make = [QueRes sharedInstance];

make.question = card [0];
make.response = card [1];
但是,当我使用变量问题和变量回答时,它会显示为空白或没有任何内容。我使用的变量如下:

QueRes *make = [QueRes sharedInstance];
_questionTextView.text = make.question;
顺便说一句,我用来声明变量的方法是:

在h

@interface PreRes : NSObject

{
    NSString *_response;
    NSString *_question;     
}

*+* (PreRes *)sharedInstance;

@property(strong, nonatomic, readwrite) NSString *question;   
@property(strong, nonatomic, readwrite) NSString *response;

@end
在m

@implementation QueRes  

@synthesize response = _response;
@synthesize question = _question;

+ (QueRes *)sharedInstance 
{
    static dispatch_once_t onceToken;
    static QueRes *instance = nil;
    dispatch_once(&onceToken, ^{
        instance = [[QueRes alloc] init];
    });

    return instance;
}

- (id)init  
 {

    self = [super init];

    if (self) 
    { 
        _question = nil;
        _response = nil;
    }


    return self;
 }
@end

在Objective-C/Cocoa中拆分字符串可以在NSString上使用以下两种方法:

- (NSArray *)componentsSeparatedByString:(NSString *)separator;
- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator;
从由字符串分隔的
组件的文档中:


数组中的子字符串按它们在接收器中的顺序显示。分隔符字符串的相邻匹配项在结果中生成空字符串。类似地,如果字符串以分隔符开头或结尾,则第一个或最后一个子字符串分别为空。例如,此代码片段:

NSString *list = @"Norman, Stanley, Fletcher";
NSArray *listItems = [list componentsSeparatedByString:@", "];
生成一个数组
{@“Norman”、@“Stanley”、@“Fletcher”}。

如果列表以逗号和空格开头,例如,“、Norman、Stanley、Fletcher”-则数组包含以下内容:
{@”“@“Norman”、@“Stanley”、@“Fletcher”}

如果列表没有分隔符,例如,“Norman”-数组包含字符串本身,在本例中为
{@“Norman”}


但这两种方法实际上并不适用于健壮的文本处理任务。您可能应该研究以下API:

- (void)enumerateLinguisticTagsInRange:(NSRange)range 
                               scheme:(NSString *)tagScheme 
                              options:(NSLinguisticTaggerOptions)opts 
                          orthography:(NSOrthography *)orthography 
                           usingBlock:(void (^)(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop))block;

- (void)enumerateSubstringsInRange:(NSRange)range 
                           options:(NSStringEnumerationOptions)opts
                        usingBlock:(void (^)(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop))block;

另外,请注意,如果
componentsSeparatedByString:
返回的项目少于预期,则盲目访问
componentsSeparatedByString:
返回的数组项目将导致索引超出范围异常崩溃。如果您在上面发布的代码中字符串缺少分号,情况也会如此

您应该验证返回的数组是否为正确/预期长度。例如:

if ([card count] >= 2)
{
    make.question = card[0];
    make.response = card[1];
}

从您的问题来看,我认为您的问题可能在于“单例”而不是字符串拆分逻辑。

在查询后设置两个断点*make=[QueRes sharedInstance];行,并确保变量“make”在两次都是相同的。如果是nil或其他值,那么您的sharedInstance逻辑有问题。还要确保
\u questionTextView
不是
nil
。很抱歉,我在目标c中有点新,singletonI添加了我用来生成变量的方法是什么意思?如果这有助于您找到问题@orj