我正在关注Mac上的Learning Objective-C中最早的一个例子.我的代码几乎与书中的代码完全相同(一些空格和平凡的括号可能不同).它看起来像这样:
#import <Foundation/Foundation.h>
BOOL areIntsDifferent (int thing1, int thing2) {
if (thing1 == thing2) {
return NO;
}
else {
return YES;
}
}
NSString * boolString (BOOL yesNo) {
if (yesNo == NO) {
return (@"NO");
}
else {
return (@"YES");
}
}
int main (int argc, const char * argv[]) {
BOOL areTheyDifferent;
areTheyDifferent = areIntsDifferent(5, 5);
NSLog(@"are %d and %d different? %@", 5, 5, boolString(areTheyDifferent));
areTheyDifferent = areIntsDifferent(23, 42);
NSLog(@"are %d and $d different? …Run Code Online (Sandbox Code Playgroud) 我收到一个EXC_BAD_ACCESS错误,这是因为这部分代码.基本上,我接受一个输入并做一些工作.多次输入后,它会抛出错误.我在这里做错了吗?我会发布剩下的代码,但它相当长 - 而且我认为这可能是我的问题所在(至少Xcode指向我的地方).
-(IBAction) findShows: (id) clicked
{
char urlChars[1000];
[self getEventURL: urlChars];
NSString * theUrl = [[NSString alloc] initWithFormat:@"%s", urlChars];
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:theUrl]];
int theLength = [data length];
NSString *content = [NSString stringWithUTF8String:[data bytes]];
char eventData[[data length]];
strcpy(eventData, [content UTF8String]);
[self parseEventData: eventData dataLength: theLength];
[whatIsShowing setStringValue:@"Showing events by this artist"];
}
Run Code Online (Sandbox Code Playgroud) 当我从一个实现了我试图调用的方法的对象调用 performSelector:withObject: 时,我得到了一个 EXC_BAD_ACCESS 异常。这是我的代码
SEL newSelector = NSSelectorFromString(@"mySelector:withCustomObject:");
[self performSelector:newSelector withObject:myCustomObject];
Run Code Online (Sandbox Code Playgroud)
这会导致崩溃。但是,当我这样做时
[self performSelector:@selector(mySelector:withCustomObject:) withObject:myCustomObject];
Run Code Online (Sandbox Code Playgroud)
有用。
关于为什么会发生这种情况的任何想法?PS:没有一个参数是nil。
更多代码:
// My code to call this method
SEL newSelector = NSSelectorFromString(@"mySelector:withCustomObject:");
[self performSelector:newSelector withObject:self withObject:myCustomObject];
// this code is NOT called.
- (void) mySelector:(jObject *)sender withCustomObject:(jEvent *)customObject
{
NSDictionary *handlerData = [aProperty objectAtIndex:[event positionInMethodStack]];
NSString *newTitle = [handlerData objectForKey:@"newTitle"];
}
Run Code Online (Sandbox Code Playgroud) 我想知道如何正确地做到这一点,因为我收到了错误访问错误.
在我的应用程序中,我有81 UIButtons个IBAction通过Interface Builder连接到所有这些,这IBAction应该设置用户点击的按钮的文本.我试着这样做:
- (IBAction)changeTitle:(UIButton *)button {
button.titleLabel.text = [NSString stringWithFormat:@"%@", myString];
}
-(IBAction)setMyString:(id)sender{
myString = [NSString stringWithFormat:@"text"];
}
Run Code Online (Sandbox Code Playgroud)
然而,这会导致错误访问错误,我该如何解决?百万谢谢!
错误消息:EXC_BAD_ACCESS(code = 1,address = 0x0)(lldb)
嘿所以我得到了经典EXC_BAD_ACCESS (Code = 1, address = 0x10),似乎无法弄清楚为什么.我用以下方法得到错误:
+ (void)logoutWithXId:(NSString *)xId compelationHandler:(void (^)(BOOL))hasSucceeded
{
NSError *error;
// create json object for a users session
NSDictionary *session = [NSDictionary dictionaryWithObjectsAndKeys:
xId, @"x_id",
nil];
NSData *jsonSession = [NSJSONSerialization dataWithJSONObject:session options:NSJSONWritingPrettyPrinted error:&error];
NSString *url = [NSString stringWithFormat:@"%@xsession/logout", potCatURL];
NSURL *URL = [NSURL URLWithString:url];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:30.0];
NSString *headerValue = [NSString stringWithFormat:@"Token token=%@", APIToken];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:headerValue forHTTPHeaderField:@"Authorization"];
[request setValue:[NSString stringWithFormat:@"%lu", (unsigned …Run Code Online (Sandbox Code Playgroud) 当我尝试制作一个简单的应用程序时,出现以下错误:
@IBAction func pickButton(sender: UIButton) {
numberLabel.text = String(format: "The number is %@", randomNumber) Thread 1: EXC_BAD_ACCESS (code=1, address=0x176b)
}
Run Code Online (Sandbox Code Playgroud)
这是完整的代码:
import UIKit
class ViewController2: UIViewController {
@IBOutlet weak var numberLabel: UILabel!
@IBOutlet weak var pickButton: UIButton!
var randomNumber = arc4random_uniform(10000) + 1
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func pickButton(sender: …Run Code Online (Sandbox Code Playgroud) 这是许多EXC_BADACCES问题之一,但我已经做了很长时间的研究,并认为这个问题尚未得到解答.我的应用程序在首选项中保存数据.一切都很好,如果我删除首选项并启动应用程序,那么根本不会发生任何加载.但如果发生加载,就会出现问题.我必须保存一个主数组,其中包含一个名为Box的自写对象.One Box有一个NSString*boxName和六个NSMutableArray*,它们包含另一个自编写的对象,称为Flashcard,它包含两个NSString*:问题和答案.如果AppDelegate获取消息applicationWillTerminate,它将使用NSKeyedArchiver对主数组(称为boxArray)进行编码,并将其保存在首选项中.在AppControll的init方法中,此归档文件是从首选项加载的:
- (id)init {
self = [super init];
if (self) {
// Initialization code here.
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSData* archive = [defaults objectForKey:@"boxArray"];
if (archive) {
NSArray* array = [NSKeyedUnarchiver unarchiveObjectWithData:archive];
boxArray = [NSMutableArray arrayWithArray:array];
} else {
boxArray = [[NSMutableArray alloc] init];
}
}
return self;
Run Code Online (Sandbox Code Playgroud)
}
在Box的encodeWithCoder方法中,它为它的所有数组创建了sereval NSData*对象,就像这样.
NSData* p1archv = [NSKeyedArchiver archivedDataWithRootObject:phase1];
[aCoder encodeObject:p1archv forKey:@"phase1"];
Run Code Online (Sandbox Code Playgroud)
它加载如下所有内容:NSData*p1archv = [aDecoder decodeObjectForKey:@"phase1"];
if (p1archv) {
NSArray* a = [NSKeyedUnarchiver unarchiveObjectWithData:p1archv];
phase1 = [NSMutableArray arrayWithArray:a];
NSLog(@"loaded phase1: %@",phase1); …Run Code Online (Sandbox Code Playgroud) 我正在开发一款iPhone应用程序.
我有以下INIT代码:
shapes = [NSMutableArray arrayWithCapacity:numShapes];
Run Code Online (Sandbox Code Playgroud)
之后,我想做以下事情:
- (CGSize) sizeOfShapeType:(ShapeType)type{
CGSize shapeSize = CGSizeMake(0, 0);
if (shapes != nil) {
for(Object2D* obj in shapes)
if (obj.figure == type) {
shapeSize = obj.size;
break;
}
}
return (shapeSize);
}
Run Code Online (Sandbox Code Playgroud)
但我总是得到一个EXEC_BAD_ACCESS,因为形状数组中的所有形状都是null.
如何检查Object2D是否为空?
我在这里得到例外:
for(Object2D* obj in shapes)
Run Code Online (Sandbox Code Playgroud) 我正在研究iPhone/iPad应用程序,我遇到了一个令人不快的问题.
有MyWebViewController一个以a 命名的类
@property (nonatomic, retain) NSString* currentPage;
Run Code Online (Sandbox Code Playgroud)
几种方法:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
...
[self method1:self.currentPage];
...
}
- (void)method1:(NSString *)key
{
...
[self method2];
...
}
Run Code Online (Sandbox Code Playgroud)
在dubugging [self method2];行中,应用程序崩溃时出现EXC_BAD_ACCESS异常但指向[self method1:self.currentPage];行!
我试图启用NSZombie但它没有帮助.
所以我完全糊涂了,无法做什么.这就是为什么我真的很感谢你的帮助!
为什么循环中的第二行(a.retainCount为1)不会崩溃(由于访问不当)?
NSArray* a0 = @[[NSMutableString stringWithString:@"a"]];
NSArray * arr = [NSArray arrayWithObject:a0];
[a0 release];[a0 release];
for (NSArray* a in arr)
{
//NSLog(@"%d", (a == a0) );
NSLog(@"RC: %d", a.retainCount);
}
Run Code Online (Sandbox Code Playgroud)
但如果循环中的第一行(a == a0 one)未被注释,它就会崩溃.
当自动释放池耗尽时,这肯定会崩溃,但我特意询问循环中的第二行,而不是之后.
有人可以解释一下吗?
exc-bad-access ×10
objective-c ×8
ios ×6
crash ×1
iphone ×1
memory ×1
swift ×1
uibutton ×1
xcode ×1