【问题标题】:Argument in message expression is an uninitialized value?消息表达式中的参数是未初始化的值?
【发布时间】:2011-10-24 14:02:09
【问题描述】:

我收到警告消息表达式中的参数是下面粗体行中的未初始化值:

***SHKActionSheet *as = [[SHKActionSheet alloc] initWithTitle:SHKLocalizedString(@"Share")***
                                                      delegate:as
                                             cancelButtonTitle:nil
                                        destructiveButtonTitle:nil
                                             otherButtonTitles:nil];
    as.item = [[[SHKItem alloc] init] autorelease];
    as.item.shareType = type;

任何想法有什么问题或我该如何解决? P.S - 这是在 ShareKit 中

谢谢!

Edit1:所以你是说要这样做?

+ (SHKActionSheet *)actionSheetForType:(SHKShareType)type
{
    SHKItem *myItem = [SHKItem text:@"Share"];  // See SHKItem for other convenience constructors for URL, image, text and file item types.
    SHKActionSheet *as = [SHKActionSheet actionSheetForItem:myItem];
    as.item.shareType = type;

    as.sharers = [NSMutableArray arrayWithCapacity:0];
    NSArray *favoriteSharers = [SHK favoriteSharersForType:type];

    // Add buttons for each favorite sharer
    id class;
    for(NSString *sharerId in favoriteSharers)
    {
        class = NSClassFromString(sharerId);
        if ([class canShare])
        {
            [as addButtonWithTitle: [class sharerTitle] ];
            [as.sharers addObject:sharerId];
        }
    }

    // Add More button
    [as addButtonWithTitle:SHKLocalizedString(@"More...")];

    // Add Cancel button
    [as addButtonWithTitle:SHKLocalizedString(@"Cancel")];
    as.cancelButtonIndex = as.numberOfButtons -1;

    return [as autorelease];
}

编辑2:

+ (SHKActionSheet *)actionSheetForType:(SHKShareType)type
{

    SHKActionSheet *as = [[SHKActionSheet alloc] initWithTitle:SHKLocalizedString(@"Share")
                                                      delegate:nil
                                             cancelButtonTitle:nil
                                        destructiveButtonTitle:nil
                                             otherButtonTitles:nil];
    as.item = [[[SHKItem alloc] init] autorelease];
    as.delegate = self;


    as.item.shareType = type;

    as.sharers = [NSMutableArray arrayWithCapacity:0];
    NSArray *favoriteSharers = [SHK favoriteSharersForType:type];

    // Add buttons for each favorite sharer
    id class;
    for(NSString *sharerId in favoriteSharers)
    {
        class = NSClassFromString(sharerId);
        if ([class canShare])
        {
            [as addButtonWithTitle: [class sharerTitle] ];
            [as.sharers addObject:sharerId];
        }
    }

    // Add More button
    [as addButtonWithTitle:SHKLocalizedString(@"More...")];

    // Add Cancel button
    [as addButtonWithTitle:SHKLocalizedString(@"Cancel")];
    as.cancelButtonIndex = as.numberOfButtons -1;

    return [as autorelease];
}

【问题讨论】:

    标签: ios xcode memory-leaks sharekit analyzer


    【解决方案1】:

    我很确定问题出在这一行:

    delegate:as
    

    问题是您将委托设置为“as”,这是您正在初始化的操作表的名称。 (因此您试图将 ref 传递给您正在初始化的对象作为其初始化程序的参数)。

    而是在 alloc/init 调用中将委托设置为 nil,并在调用后显式设置委托。

    SHKActionSheet *as = [[SHKActionSheet alloc] initWithTitle:SHKLocalizedString(@"Share")***
                                        delegate:nil
                                        cancelButtonTitle:nil
                                        destructiveButtonTitle:nil
                                        otherButtonTitles:nil];
    as.delegate = as;
    as.item = [[[SHKItem alloc] init] autorelease];
    as.item.shareType = type;
    

    【讨论】:

    • 如果我委托:self 我得到一个真正的警告:不兼容的指针类型将“类”发送到类型 id 的参数
    • 你需要在你的类中实现 UIActionSheetDelegate 方法。我刚刚查看了 SHKActionSheet 对象——它确实实现了 UIActionSheetDelegate 协议,因此将其设置为自身的委托并不合逻辑。我将添加另一个关于使用静态便捷方法的答案(以便我可以格式化代码)
    • 检查我上面的edit1,请确认我是否应该这样做。谢谢! :D
    • 还在最后一行显示分析器警告返回 [as autorelease];并且警告是:自动释放太多次,我将如何解决这个问题?
    • 抱歉,我对您要执行的操作感到有些困惑。您是尝试使用 SHKActionSheet,还是尝试修改 SHK 代码库。如果您尝试使用 SHKActionSheet - 只需在您自己的代码中某处使用便捷方法,正如我在编辑中所示。如果您尝试修改 SHK 库代码本身(在您上面编辑的示例中,您实际上是将代码放在 SHKActionSheet 类中),那么您需要详细说明您想要实现的目标。
    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2011-11-15
    • 2013-08-22
    相关资源
    最近更新 更多