标签: nsscanner

是什么导致"NSScanner:nil字符串参数"?

我将数据保存到核心数据时收到此消息.

NSScanner: nil string argument
Run Code Online (Sandbox Code Playgroud)

我没有使用任何NSScanner方法.它从哪里来的?

这是一个错误吗?我该怎么办?

谢谢你的帮助.

iphone ios nsscanner

27
推荐指数
2
解决办法
1万
查看次数

将字符串拆分为数组的最佳方法

我正在开发一个旅行应用程序,我必须阅读包含所有州和国家的txt文件,因为您可以注意到这是一个非常大的文件,无论如何,这是文件内部文本的示例:

Zakinthos(ZTH),希腊
Zanesville(ZZV),美国
Zanjan(JWN),IRAN
Zanzibar(ZNZ),TANZANIA
......

现在我正在阅读文件没有问题,但我不知道如何创建两个数组,一个与州,另一个与国家,所以我可以在文本自动完成时将它们显示在表中.

我已经尝试使用NSScanner使用","作为分隔符,但我不知道如何使其工作,我也尝试使用NSString方法没有结果.

欢迎任何帮助,谢谢你提前!!!

顺便说一下我的英语XD

arrays split token nsstring nsscanner

22
推荐指数
2
解决办法
3万
查看次数

如何使用NSScanner?

我刚读苹果的实况 NSScanner的.我正在尝试获取该字符串的整数:@"用户记录(3次尝试)".

我找不到任何例子,如何在括号内扫描.有任何想法吗?

这是代码:

NSString *logString = @"user logged (3 attempts)";
NSScanner *aScanner = [NSScanner scannerWithString:logString];

[aScanner scanInteger:anInteger];

NSLog(@"Attempts: %i", anInteger);
Run Code Online (Sandbox Code Playgroud)

string cocoa parsing objective-c nsscanner

16
推荐指数
4
解决办法
4万
查看次数

NSScanner在简单的空白移除上的奇怪行为

我试图用一个空格替换某些文本中的所有多个空格.这应该是一个非常简单的任务,但由于某种原因,它返回的结果与预期不同.我已经阅读了NSScanner上的文档,看起来它运行不正常!

NSScanner *scanner = [[NSScanner alloc] initWithString:@"This    is   a test of NSScanner   !"];
NSMutableString *result = [[NSMutableString alloc] init];
NSString *temp;
NSCharacterSet *whitespace = [NSCharacterSet whitespaceCharacterSet];
while (![scanner isAtEnd]) {

    // Scan upto and stop before any whitespace
    [scanner scanUpToCharactersFromSet:whitespace intoString:&temp];

    // Add all non whotespace characters to string
    [result appendString:temp];

    // Scan past all whitespace and replace with a single space
    if ([scanner scanCharactersFromSet:whitespace intoString:NULL]) {
        [result appendString:@" "];
    }

}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,结果@"ThisisatestofNSScanner!"不是@"This is a test of …

iphone cocoa objective-c nsscanner

11
推荐指数
1
解决办法
1966
查看次数

NSScanner是否适用于Swift Strings?

我想知道为什么这样做(注意我使用的是NSString类型):

    let stringToSearch:NSString = "I want to make a cake and then prepare coffee"
    let searchTerm:NSString = "cake"
    let scanner = NSScanner(string: stringToSearch)
    var result:NSString? = nil
    scanner.scanUpToString(searchTerm, intoString:&result)
    println(result) // correctly outputs "I want to make a"
Run Code Online (Sandbox Code Playgroud)

但如果我尝试使用"String"类型而不是"NSString",则无法编译:

    let altStringToSearch:String = "I want to make a cake and then prepare coffee"
    let altSearchTerm:String = "cake"
    let altScanner = NSScanner(string: altStringToSearch)
    var altResult:String? = nil
    altScanner.scanUpToString(altSearchTerm, intoString:&altResult)
    println(result)
Run Code Online (Sandbox Code Playgroud)

错误说"无法转换表达式的类型'BOOL'来输入'inout String?' 在scanUpToString行上.我不确定它甚至指的是什么BOOL.

那么,NSScanner不能与Swift String类型一起使用吗?是否有我应该使用的新命令?

nsstring nsscanner swift xcode6 ios8

9
推荐指数
1
解决办法
5091
查看次数

优化字符串解析

我需要以"txf"格式解析数据文件.这些文件可能包含1000多个条目.由于格式定义如JSON,我想创建一个像JSON这样的通用解析器,它可以序列化和反序列化txf文件.

与JSON相反,标记没有办法识别对象或数组.如果出现具有相同标记的条目,我们需要将其视为数组.

  1. # 标记对象的开头.
  2. $ 标记对象的成员
  3. / 标记对象的结尾

以下是示例"txf"文件

#Employees
$LastUpdated=2015-02-01 14:01:00
#Employee
$Id=1
$Name=Employee 01
#Departments
$LastUpdated=2015-02-01 14:01:00
#Department
$Id=1
$Name=Department Name
/Department
/Departments
/Employee
#Employee
/Employee
/Employees
Run Code Online (Sandbox Code Playgroud)

我能够使用NSScanner 创建一个通用的TXF Parser.但随着更多的条目,性能需要更多的调整.

我写了基础对象plist,并将其性能再次与我编写的解析器进行了比较.我的解析器比plist解析器慢大约10倍.

虽然plist文件大小是5倍以上txf并且有更多标记字符,但我觉得有很多优化空间.

我们非常感谢在这方面提供任何帮助.

编辑:包括解析代码

static NSString *const kArray    = @"TXFArray";
static NSString *const kBodyText = @"TXFText";

@interface TXFParser ()

/*Temporary variable to hold values of an object*/
@property (nonatomic, strong) NSMutableDictionary *dict;

/*An array to hold the hierarchial …
Run Code Online (Sandbox Code Playgroud)

markup parsing objective-c ios nsscanner

9
推荐指数
1
解决办法
854
查看次数

使用NSScanner查找字符串中的所有数字

我使用以下代码从inputString使用中提取数字NSScanner

NSString *inputString = @"Dhoni7 notout at183*runs in 145andhehit15four's and10sixers100";
NSString *numberString;
NSArray *elements = [inputString componentsSeparatedByString:@" "];
for (int i=0; i<[elements count];i++)
{
    NSScanner *scanner = [NSScanner scannerWithString:[elements objectAtIndex:i]];
    NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"1234567890"];

    // Throw away characters before the first number.
    [scanner scanUpToCharactersFromSet:numbers intoString:NULL];

    // Collect numbers.
    [scanner scanCharactersFromSet:numbers intoString:&numberString];

    // Result.
    int number = [numberString integerValue];
    if (number != 0)
    {
        NSLog(@"%d\n",number);
        numberString = nil;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的预期产量是7 183 145 15 10 100

但我得到的输出是7 …

string objective-c nsnumber number-formatting nsscanner

7
推荐指数
2
解决办法
1059
查看次数

使用NSScanner解析字符串

我有一个带有格式标签的字符串,例如There are {adults} adults, and {children} children.我有一个字典,其中"成人"和"孩子"作为键,我需要查找值并用该值替换宏.这是完全动态的; 键可以是任何东西(所以我不能硬编码stringByReplacingString).

在过去,我只是通过循环遍历可变字符串并搜索字符来完成类似的事情; 在我去的时候从源字符串中删除我已经搜索过的内容.看起来这正是NSScanner的设计类型,所以我尝试了这个:

NSScanner *scanner = [NSScanner scannerWithString:format];
NSString *foundString;
scanner.charactersToBeSkipped = nil;

NSMutableString *formatedResponse = [NSMutableString string];

while ([scanner scanUpToString:@"{" intoString:&foundString]) {
    [formatedResponse appendString:[foundString stringByReplacingOccurrencesOfString:@"{" withString:@""]]; //Formatted string contains everything up to the {

    [scanner scanUpToString:@"}" intoString:&foundString];

    NSString *key = [foundString stringByReplacingOccurrencesOfString:@"}" withString:@""];

    [formatedResponse appendString:[data objectForKey:key]];

}

NSRange range = [format rangeOfString:@"}" options:NSBackwardsSearch];

if (range.location != NSNotFound) {
    [formatedResponse appendString:[format substringFromIndex:range.location + 1]];
}
Run Code Online (Sandbox Code Playgroud)

这个问题是,当我的字符串以"{"开头时,扫描仪返回NO,而不是YES.(这是文档所说的应该发生的事情).我是否滥用NSScanner?事实上,scanUpToString不包括作为其输出的一部分被搜索的字符串似乎使它几乎无用......

这可以轻松更改为我想要的,或者我是否需要使用可变字符串重写并手动搜索字符?

objective-c nsstring ios nsscanner

6
推荐指数
1
解决办法
9312
查看次数

如何使用NSScanner解析.ics文件

有人可以告诉我如何使用NSScanner解析一个ics文件?(Iphone App)

例如:如果.ics文件位于此URL http://www.ibz.com/data/12345.ics(不是真正的URL !!!)

  1. 我如何首先将.ics文件保存到我的iPhone应用程序中

  2. 然后我将如何使用NSScanner解析.ics文件?

请提供代码示例..

iphone icalendar objective-c nsscanner

5
推荐指数
1
解决办法
1925
查看次数

在arm64上使用NSScanner处理CGFloat

显然CGFloatdouble在arm64上:

#if defined(__LP64__) && __LP64__
# define CGFLOAT_TYPE double
# define CGFLOAT_IS_DOUBLE 1
# define CGFLOAT_MIN DBL_MIN
# define CGFLOAT_MAX DBL_MAX
#else
# define CGFLOAT_TYPE float
# define CGFLOAT_IS_DOUBLE 0
# define CGFLOAT_MIN FLT_MIN
# define CGFLOAT_MAX FLT_MAX
#endif
Run Code Online (Sandbox Code Playgroud)

所以代码

NSScanner *scanner = [NSScanner scannerWithString:string];
CGFloat c[components];
[scanner scanFloat:&c[i]]
Run Code Online (Sandbox Code Playgroud)

这对于32位应用程序来说效果很好,但是对于64位应用程序来说是破碎的.它可以替换为

NSScanner *scanner = [NSScanner scannerWithString:string];
CGFloat c[components];
#if CGFLOAT_IS_DOUBLE 
   [scanner scanDouble:&c[i]]; 
#else 
   [scanner scanFloat:&c[i]]; 
#endif
Run Code Online (Sandbox Code Playgroud)

但是有更好的选择吗?

double cocoa-touch cgfloat nsscanner arm64

5
推荐指数
1
解决办法
289
查看次数