IOS-8-Xcode6 使用MJRefresh报错:Too many arguments to function call, expected 0, have 3

本文介绍了解决XCode 6升级后出现的编译错误问题,特别是针对Too many arguments to function call错误的具体解决方案,并分享了一些实用技巧。

1.报错问题:将XCode升级到6后,报Too many arguments to function call, expected 0, have *,在XCode5.1里能编译通过的,到xcode6就报错

objc_msgSend(self.beginRefreshingTaget, self.beginRefreshingAction, self);

Too many arguments to function call, expected 0, have *

2.解决办法:问了下度娘,

选中项目 - Project - Build Settings - ENABLE_STRICT_OBJC_MSGSEND 将其设置为 NO 即可

如果其他文件还报错,请在报错文件添加:

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>


顺便总结:目前在公司对老项目进行重构更新,用OC/Swift,主要涉及百度地图、二维码、友盟第三方、微信支付、支付宝支付、评论、tableview显示服务端数据等

在调用函数时,出现 `too many arguments to function call, expected single argument &#39;String&#39;, have 2 arguments` 这类错误,表明函数定义与实际调用时的参数数量不一致。以下是常见的原因和解决方法: ### 1. 函数定义与调用不匹配 - **原因**:声明的函数期望接收一个参数,但在调用时传递了两个或更多参数。例如,函数定义为 `void myFunction(String arg)`,但调用时使用了 `myFunction(arg1, arg2)`。 - **解决方法**:检查函数定义和调用,确保参数数量一致。如果需要多个参数,应修改函数定义以支持多参数传递。 ### 2. 使用 Objective-C 的 `objc_msgSend` 调用问题 - **原因**:在使用 `objc_msgSend` 进行消息传递时,如果编译器启用了严格的检查,可能会因为参数数量不匹配而报错。例如,在 Xcode 12 及更高版本中,即使将 `Enable Strict Checking of objc_msgSend Calls` 设置为 `NO`,也可能在真机调试时出现此类错误 [^3]。 - **解决方法**:确保调用的方法签名与实际参数匹配,或者在必要时使用类型转换来绕过编译器检查。 ### 3. Swift 中的函数重载问题 - **原因**:在 Swift 中,如果存在多个同名函数但参数不同,编译器可能无法正确推断应调用哪个函数,导致参数数量不匹配的错误。 - **解决方法**:明确指定调用的函数类型,或者使用类型注解来帮助编译器进行正确的函数选择。 ### 4. 不正确的字符串格式化 - **原因**:在使用 `NSString` 或 `String` 的格式化方法时,例如 `[NSString stringWithFormat:]`,如果格式字符串与实际参数数量不匹配,也会导致此类错误 [^2]。 - **解决方法**:确保格式字符串中的占位符数量与实际传递的参数数量一致。 ### 示例代码 以下是一个简单的示例,展示如何正确调用一个接受单个字符串参数的函数: ```objective-c // 函数定义 void showMessage(NSString *message) { NSLog(@"%@", message); } // 正确的调用方式 showMessage(@"这是一个测试消息"); ``` 如果尝试传递多个参数,如下所示: ```objective-c showMessage(@"参数1", @"参数2"); // 错误:参数数量不匹配 ``` 编译器将报错,提示 `too many arguments to function call, expected single argument &#39;String&#39;, have 2 arguments`。 ### 相关问题 1. 如何在 Swift 中解决函数重载导致的参数不匹配问题? 2. 如果 `objc_msgSend` 调用失败,有哪些替代方案可以使用3. 在 Objective-C 中,如何正确使用 `NSString stringWithFormat:` 方法避免参数不匹配?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值