我正在制作一款帮助学生学习的应用,但我遇到了麻烦。该应用程序允许您在其他事情之间做笔记,但我需要帮助使我的代码工作。我试图将一个NSString
划分为一个特定的角色,例如用户在一个音符中写道:“海豚:鲸类哺乳动物是紧密的...”我需要应用识别角色:还有部分在左边的那个它需要保存以便以后使用,作为变量和右边的部分也可以作为一个不同的变量,以便我以后可以使用它们。
现在就像这样做
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
答案 0 :(得分:2)
在Objective-C / Cocoa中拆分字符串可以在NSString上使用这两种方法完成:
- (NSArray *)componentsSeparatedByString:(NSString *)separator;
- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator;
来自componentsSeparatedByString:
的文档:
数组中的子串按照接收器中的顺序显示。相邻的分隔符字符串出现在结果中产生空字符串。类似地,如果字符串以分隔符开头或结尾,则第一个或最后一个子字符串分别为空。例如,此代码片段:
NSString *list = @"Norman, Stanley, Fletcher";
NSArray *listItems = [list componentsSeparatedByString:@", "];
生成一个数组{ @"Norman", @"Stanley", @"Fletcher" }.
如果列表以逗号和空格开头,例如“,Norman,Stanley,Fletcher” - 数组包含以下内容:{ @"", @"Norman", @"Stanley", @"Fletcher" }
如果list没有分隔符 - 例如,“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];
}
从你的问题来看,我认为你的问题可能在于你的“单身”,而不是你的字符串分裂逻辑。