繁体   English   中英

从“ NSMutableArray *”分配给“ NSString *”的指针类型不兼容

[英]Incompatible pointer types assigning to 'NSString *' from 'NSMutableArray *'

我目前正在上一个iOS开发课程,并且在课程中遇到的这一行代码会产生以下警告:不兼容的指针类型从'NSMutableArray *'分配给'NSString *'。

media.comments = randomComments;

在此行中创建数组:

NSMutableArray *randomComments = [NSMutableArray array];

我尝试将mutableCopy添加到randomComments数组的末尾以使警告静音,如本网站上其他地方所建议的那样,但警告仍然存在:

// Doesn't silence warning    
NSMutableArray *randomComments = [[NSMutableArray array]mutableCopy];

有人有其他建议如何平息我遇到的不兼容的指针类型警告吗?

这是完整的方法:

- (void) addRandomData {
    NSMutableArray *randomMediaItems = [NSMutableArray array];

    for (int i = 1; i <= 10; i++) {
        NSString *imageName = [NSString stringWithFormat:@"%d.jpg", i];
        UIImage *image = [UIImage imageNamed:imageName];

        if (image) {
            BLCMedia *media = [[BLCMedia alloc] init];
            media.user = [self randomUser];
            media.image = image;

            NSUInteger commentCount = arc4random_uniform(10);
            NSMutableArray *randomComments = [NSMutableArray array];

            for (int i  = 0; i <= commentCount; i++) {
                BLCComment *randomComment = [self randomComment];
                [randomComments addObject:randomComment];
            }

            media.comments = randomComments;

            [randomMediaItems addObject:media];
        }
    }

    self.mediaItems = randomMediaItems;
}

您的基本问题是尝试将一种对象类型( NSMutableArray )分配给另一种对象类型( NSString )。 您需要确定哪个是正确的类型,然后使两个对象都键入该类型。

假设您要创建一个对象数组( BLCMedia ),每个对象都有一个NSString类型的comments属性,则以下内容将解决您的问题:

- (void) addRandomData {
    NSMutableArray *randomMediaItems       = [NSMutableArray array];
    for (int i = 1; i < 11; i = i + 1) {
        NSString *imageName                = [NSString stringWithFormat:@"%d.jpg", i];
        UIImage *image                     = [UIImage imageNamed:imageName];
        if (image != nil) {
            BLCMedia *media                = [[BLCMedia alloc] init];
            media.user                     = [self randomUser];
            media.image                    = image;
            NSUInteger commentCount        = arc4random_uniform(10);
            for (int i = 0; i < commentCount; i = i + 1) {
                BLCComment *randomComment  = [self randomComment];
                media.comments             = randomComment;
            }
            [randomMediaItems addObject:media];
        }
    }
    self.mediaItems = randomMediaItems;
}

但是,如果一个BLCMedia 对象预期有一个阵列NSString对象作为它的comments属性,下面将解决您的问题:

// In BLCMedia.h/.m
// Change this:
@property (copy  , nonatomic) NSString       *randomComments;
// To this:
@property (strong, nonatomic) NSMutableArray *randomComments;


- (void) addRandomData {
    NSMutableArray *randomMediaItems           = [NSMutableArray array];
    for (int i = 1; i < 11; i = i + 1) {
        NSString *imageName                    = [NSString stringWithFormat:@"%d.jpg", i];
        UIImage *image                         = [UIImage imageNamed:imageName];
        if (image != nil) {
            BLCMedia *media                    = [[BLCMedia alloc] init];
            media.user                         = [self randomUser];
            media.image                        = image;
            NSUInteger commentCount            = arc4random_uniform(10);
            NSMutableArray *randomComments     = [NSMutableArray array];
            for (int i = 0; i <= commentCount; i = i + 1) {
                BLCComment *randomComment      = [self randomComment];
                [randomComments addObject:randomComment];
            }
            media.comments = randomComments;
            [randomMediaItems addObject:media];
        }
    }
    self.mediaItems = randomMediaItems;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM