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