我试图替换数组“第7行”的第7个索引。 NSMUTABLEARRAY“lines2”源自UNIX命令“ps aux”,我怀疑这个命令返回一个NSCFStrings数组。我现在基本上试图用“Ss(Running)”代替“Ss”。问题是我每次都得到一个SIGABRT错误程序到达它试图替换特定数组元素的那个部分。我的viewController的代码如下。无法取代派生自“ps aux”输出的NSArray UNIX命令
NSLog(@"myString is :%@", myString);
int processID = [myString intValue];
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/ps"];
arguments = [NSArray arrayWithObjects: @"aux", [NSString stringWithFormat:@"%i", processID],nil];
[task setArguments: arguments];
NSPipe *pipe;
pipe = [NSPipe pipe];
//[task setStandardOutput: pipe];
[task setStandardOutput:pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
NSString *string;
string = [[NSString alloc] initWithData: data
encoding: NSUTF8StringEncoding];
// NSLog(@"%@",string);
NSArray *lines= [string componentsSeparatedByString:@"\n"];
NSString *lastline = [lines objectAtIndex:[lines count]-2];
// NSLog(@"%@",lastline);
lines2= [lastline componentsSeparatedByString:@" "];
NSLog(@"%@",lines2);
for (int i=0; i<[lines2 count]; i++) {
if([[lines2 objectAtIndex:i] isEqualToString:@""]){
[lines2 removeObjectAtIndex:i];
}
}
for (int i=0; i<[lines2 count]; i++) {
if([[lines2 objectAtIndex:i] isEqualToString:@""]){
[lines2 removeObjectAtIndex:i];
}
}
for (int i=0; i<[lines2 count]; i++) {
if([[lines2 objectAtIndex:7] isEqualToString:@"Ss"]){
[[lines2 objectAtIndex:0] replaceObjectAtIndex:7 withObject:@"SS (Running)"];
}
}
任何帮助非常感谢!
其实它的一个NSMutableArray,我忘了提及。我认为它抛出一个SIGABRT是因为我试图用一个NSString替换一个NSCFString(ps aux的输出)。 –