UITextView表示当它不是时它是空的

时间:2014-02-20 08:36:55

标签: ios uitextview objective-c-blocks

我试图在UITextView内获取简单UICollectionViewCell的文字内容。基本上,当用户共享某个单元格时,我想抓住在该单元格中编写的内容,以便在ActivityViewController中使用。

事情是,它说它是空白的。它显然不是空白:当我点击“共享”时,我正确地看着它,并且它中有文字。 (该文本是拍摄照片的位置的反向查找地址。)

我非常缺乏经验的眼睛认为问题在于TextView正在被一个块填充。我不知道为什么会出现这个问题,但它似乎会向我跳出来。

下面是设置单元格的方法(从而设置TextView的文本),然后是应该抓住它的Share方法:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    PhotoCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"photoCell" forIndexPath:indexPath];

    ALAsset *asset = [_photosArray objectAtIndex:indexPath.row];
    ALAssetRepresentation *assetRep = [asset defaultRepresentation];

    [cell.labelMain setText:[assetRep filename]];

    CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation];
    CLGeocoder *geocoder = [[CLGeocoder alloc] init] ;
    [geocoder reverseGeocodeLocation:location
                   completionHandler:^(NSArray *placemarks, NSError *error) {
                       if (error){
                           NSLog(@"Geocode failed with error: %@", error);
                           return;
                       }
                       CLPlacemark *placemark = [placemarks objectAtIndex:0];

                       NSArray *addressArray = [NSArray arrayWithArray:[placemark.addressDictionary valueForKey:@"FormattedAddressLines"]];
                       [cell.textViewDescription setText:[NSString stringWithFormat:@"%@\n%@\n%@", [addressArray objectAtIndex:0], [addressArray objectAtIndex:1], [addressArray objectAtIndex:2]]];
                   }];

    return cell;
}

这一切似乎都很完美。但是在下面的Share方法中,locationName无法解释为空白:

-(void)sharePic {
    PhotoCell *currentCell = (PhotoCell*)[self collectionView:_collectionViewMain cellForItemAtIndexPath:[NSIndexPath indexPathForItem:_selectedIndex inSection:0]];

    NSString *locationName = [[currentCell textViewDescription] text];
    NSArray *arrayOfActivityItems = [NSArray arrayWithObjects:locationName, nil];

    UIActivityViewController *activityVC = [[UIActivityViewController alloc]
                                            initWithActivityItems:arrayOfActivityItems applicationActivities:nil];

    [self.navigationController presentViewController:activityVC animated:YES completion:nil];
}

我认为该块是什么导致字符串locationName在Share方法中为空? (它已正确初始化,只是一个空字符串)。如果是这样,有办法吗?或者,如果没有,任何想法locationName为什么显而易见,即使textViewDescription中有文字?

我想要的只是获取该字段中的文字......

1 个答案:

答案 0 :(得分:1)

不要从单元格中取回文本。文本应该在您的数据模型中,您应该从那里得到它...

那就是说,你的问题与块无关(虽然异步操作有时会引起你的问题)。问题是您正在创建一个新单元而不是获取现有单元。而不是:

PhotoCell *currentCell = (PhotoCell*)[self collectionView:_collectionViewMain cellForItemAtIndexPath:[NSIndexPath indexPathForItem:_selectedIndex inSection:0]];

你应该:

PhotoCell *currentCell = (PhotoCell*)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:_selectedIndex inSection:0]];