【问题标题】:How To Split NSMutableArry Data into Two parts?如何将 NSMutableArry 数据拆分为两部分?
【发布时间】:2012-12-06 07:39:42
【问题描述】:

我正在录制应用程序。在这个应用程序中,我用我自己的文本保存我的录音,它还用当前日期和时间保存录音。如下面的代码所示

-(IBAction)RecButtonPress:(id)sender
{
    NSLog(@"Song name:%@",mySongname);
    NSMutableDictionary* recordSetting = [[NSMutableDictionary alloc] init];
    [recordSetting setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
    [recordSetting setValue:[NSNumber numberWithFloat:44000.0] forKey:AVSampleRateKey]; 
    [recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
    [recordSetting setValue: [NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
    [recordSetting setValue: [NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
    [recordSetting setValue: [NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];
    NSDate* now = [NSDate date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd:MMM:YY_hh:mm:ss a"];
    NSString *file= [dateFormatter stringFromDate:now];
    NSString *fina=[file stringByAppendingString:mySongname];
    NSArray  *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docsDir  = [dirPaths objectAtIndex:0];
    NSString *soundFilePath = [docsDir stringByAppendingPathComponent:@"MyRecordings"];
    if (![[NSFileManager defaultManager] fileExistsAtPath:soundFilePath])
        [[NSFileManager defaultManager] createDirectoryAtPath:soundFilePath withIntermediateDirectories:NO attributes:nil error:nil];
            soundFilePath = [soundFilePath stringByAppendingPathComponent:fina];
    recordedTmpFile = [NSURL fileURLWithPath:soundFilePath];
    NSLog(@"Uf:%@",recordedTmpFile);
    recorder = [[ AVAudioRecorder alloc] initWithURL:recordedTmpFile settings:recordSetting error:&error];
    [recorder setDelegate:self];
    [recorder prepareToRecord];
    [recorder record];
        [recordSetting release];
       [dateFormatter release];
}

现在保存记录后,当我转到 SaveRecording 类时,实际上我在 Tableview 中显示所有这些记录。这里我的代码是

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *documentPath = [documentsDirectory stringByAppendingPathComponent:@"MyRecordings"];
directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath:documentPath];
NSLog(@"file found %i",[directoryContent count]);
NSLog(@"arraydata: %@", directoryContent );
[directoryContent retain];
[self.tableView reloadData];
 }

然后我将我的 NSMutablArray 的“directoryContent”分配给 UITableview。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  return [directoryContent count];
}

/////////////////////////////////////// /////////////////////////////////////////p >

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";
static NSInteger StateTag = 1;
static NSInteger CapitalTag = 2;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    UILabel *capitalLabel = [[UILabel alloc] initWithFrame:CGRectMake(2, 2, 120, 20)];
    //capitalLabel.text=@"mydata";
    capitalLabel.backgroundColor=[UIColor redColor];
    capitalLabel.tag = CapitalTag;
    [capitalLabel setFont:[UIFont systemFontOfSize:9]];
    [cell.contentView addSubview:capitalLabel];
    [capitalLabel release];

    UILabel *stateLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 22, 310, 20)];
    stateLabel.tag = StateTag;
    [stateLabel setFont:[UIFont systemFontOfSize:14]];
    stateLabel.adjustsFontSizeToFitWidth=YES;
    [cell.contentView addSubview:stateLabel];
    [stateLabel release];

  }
UILabel * stateLabel = (UILabel *) [cell.contentView viewWithTag:StateTag];
//UILabel * capitalLabel = (UILabel *) [cell.contentView viewWithTag:CapitalTag];

stateLabel.text = [directoryContent objectAtIndex:indexPath.row];
//capitalLabel.text = [datesaving objectAtIndex:indexPath.row];

return cell;
}

最后我的 UITableView 在屏幕截图下方看起来像这样

我所有这些简短的讨论目的是作为我的屏幕截图显示 UITableview 单元格显示我的文本和当前日期和时间。现在我想将此目录内容数组数据拆分为两个 prats。由当前日期和时间组成的部分我想将它分配给 UITableview 中单元格的红色部分的大写标签,并将文本分配给 UITableview 中单元格的一部分下方的 stateLabel。任何帮助都将得到应用。提前致谢。

【问题讨论】:

  • 你为什么不试试这个............ 1)您可以创建一个字典数组并单独保存它们,或者 2)在创建时字符串不要只是附加使用 appendWithFormat 并在两者之间添加一个特殊字符,例如 @"+%@",mySongName 并且在显示时您可以在其上使用 componentsSeparatedByString@"+" ,它将返回一个包含两个字符串的数组
  • 抱歉不是 appendWithFormat 而是 appendFormat :)
  • naveen 发布答案,请在我的脑海中仍然混乱。

标签: iphone xcode uitableview directory nsmutablearray


【解决方案1】:

首先你需要像这样附加你的字符串

NSString *file3 = [file stringByAppendingString:@"+"];


NSString *fina= [file3 stringByAppendingString:mySongname];

之后你需要像这样分开它

NSArray *Array = [str componentsSeparatedByString:@"+"]; 
NSLog(@"myindex0str:%@",[Array objectAtIndex:0]); 
NSLog(@"myindex1str:%@",[Array objectAtIndex:1]);

因此您将分别获得时间和歌曲名称。

【讨论】:

    【解决方案2】:

    嗨,莉娜,您可以尝试以下方法

    1) 字典数组

    将您的日期和歌曲名称分别保存在字典中

     NSDictionary *myData    =   [NSDictionary dictionaryWithObjectsAndKeys:myDateObj,@"SongDate",mySongName,@"SongName", nil];
    
    [myMutableArray addObject:myData]//myMutableArray is a NSMutableArray;
    

    现在可以如下使用了

    NSDictionary *dict = [directoryContent objectAtIndex:indexPath.row];
    stateLabel.text =    [dict objectForKey:@"SongName"];
    capitalLabel.text =  [dict objectForKey:@"SongDate"];
    

    2) 你可以做一个小把戏:)

    NSString *fina=[file stringByAppendingFormat:@"+%@",mySongname];
    
    NSArray *Array  =   [fina componentsSeparatedByString:@"+"];
    
    capitalLabel.text =  [Array objectAtIndex:0];
    
    stateLabel.text =    [Array objectAtIndex:1];
    

    在这里,您可以在追加时使用格式并添加任何特殊字符,以后可以使用它们来拆分字符串。

    希望这对您有任何帮助:)

    【讨论】:

    • 感谢您的帮助,但它仍然对我不起作用,因为如果您查看我的代码,我会将所有这些内容保存在 Document Directory 中,然后将所有这些内容获取到 directoryContent 可变目录中的另一个类中以在 UITableview 中显示.所以,当我从 directoryContent Mutablearry 中的 Document 目录中获取数据时,请在这里给我任何技巧。如何拆分它。谢谢
    • 当我使用上述方法 soundFilePath = [soundFilePath stringByAppendingPathComponent:myMutableArray];
    • @lena 在您只想拆分歌曲的日期和名称?您的代码中必须有某个地方将它们保存在一个字符串中,如果我在这里没有错 NSString *fina=[file stringByAppendingString:mySongname];您正在这样做,如果是这种情况,请使用第二种方法,它肯定会为您工作。
    • 当我在这里使用你的第二种方法是结果 NSString *fina=[file stringByAppendingFormat:@"+",mySongname];然后以这种方式获取 NSString *str=[directoryContent objectAtIndex:indexPath.row]; NSLog(@"myindexstr:%@",str); NSArray *Array = [str componentsSeparatedByString:@"+"]; NSLog(@"myindex0str:%@",[Array objectAtIndex:0]); NSLog(@"myindex1str:%@",[Array objectAtIndex:1]);我的 nslog 结果是 myindexstr:06:Dec:12_04:29:16 PM+ myindex0str:06:Dec:12_04:29:16 PM myindex1str: index 1 is empty
    • @lena NSString *fina=[file stringByAppendingFormat:@"+",mySongname];对不起我的错误忘记使用格式说明符:(,编辑我的答案应该是 NSString *fina=[file stringByAppendingFormat:@"+%@",mySongname];
    猜你喜欢
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多