按下键盘上的返回按钮时调用方法.在调用另一个返回整数的方法之后,将根据该整数创建一条消息.然后将消息传递到UIAlterView并显示给用户.警报没有任何选项(因此我没有给代表打电话),而只是通知用户发生了什么.
编辑:下面是完整的方法(以前显示的部分).当我在之前注释掉所有内容UIAlertView并替换字符串@"test"而不是传递消息时,警报会成功显示.我的结构没有正确处理内存吗?
- (IBAction)joinButton {
struct userInfo localUser;
[emailAddress resignFirstResponder];
//convert textField text to char array in structure
localUser.firstName = [self convertStringtoCharArray:firstName.text];
localUser.lastName = [self convertStringtoCharArray:lastName.text];
localUser.username = [self convertStringtoCharArray:username.text];
localUser.email = [self convertStringtoCharArray:emailAddress.text];
localUser.ipAddress = [self convertStringtoCharArray:localIPAddress.text];
localUser.latitude = currentLocation.coordinate.latitude;
localUser.longitude = currentLocation.coordinate.longitude;
//pass structure to be sent over socket
int result = [myNetworkConnection registerWithServer:&localUser];
NSString *message = nil;
//process result of sending attempt
if (result == 0) {
//registration succesful
message = [NSString stringWithString:@"Registration successful"]; …Run Code Online (Sandbox Code Playgroud) 我是iphone开发的新手,我一直在努力解决几天前发生的EXC_BAD_ACCESS错误.我基本上独立地使用斯坦福iphone类,我试图将一个NSManagedObjects数组传递给一个应该显示它们的TableViewController.应用程序在模拟器中启动并在tableView中显示数据,但它会立即出现EXC_BAD_ACCESS错误.
我按照这里和其他地方的说明如何使用NSZombieEnabled来识别过早释放的对象,但即使使用NSZombieEnabled也没有任何有用的消息.我的猜测是它必须是由于试图访问未通过发布/自动释放释放的未分配内存而导致的.否则它会被视为僵尸对象,就像我能够修复的其他错误一样.我不是专家,但如果我要声明一个对象并在没有实例化的情况下发送消息,那么这意味着会发生这样的事情吗?我查看了我的代码,看看我是否有类似的东西,我空了.
我在调试器中有堆栈跟踪,但我不知道如何使用它.我有点沮丧,因为我不能在代码中使用断点来进一步缩小问题,因为它似乎发生在应用程序加载完成后.如果没有可能的用户交互,我认为该应用程序将保持闲置状态.它是否在负载的尾端失败,我不能轻易看到它或者在完成加载后突然在后台做东西.我非常感谢有关如何阅读堆栈跟踪的任何提示.
我在下面键入了我的堆栈跟踪(无法弄清楚如何从调试器中复制它)
0 objc_msgSend
1 ??
2 -[NSManagedObject dealloc]
3 -[_PFManagedObjectReferenceQueue _processReferenceQue:]
4 _performRunLoopAction
5 ___CFRunLoopDoObservers
6 CFRunLoopRunSpecific
7 CFRunLoopRunInMode
8 GSEventRunModal
9 GSEventRun
10 UIApplicationMain
11 main
我的程序中的两个主要类是顶级委托类和它调用的ViewTableController.
` - (void)applicationDidFinishLaunching:(UIApplication*)application {
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
UINavigationController *contactsNavigationController = [[self createContactsNavigationController] retain];
//UINavigationController *recentsNavigationController = [[self createRecentsNavigationController:photos] retain];
tabBarController.viewControllers = [[NSArray alloc] initWithObjects: contactsNavigationController, nil];
[contactsNavigationController release];
//[recentsNavigationController release];
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)
}
- (UINavigationController*)createContactsNavigationController {
UINavigationController *contactsNavigationController = [[UINavigationController alloc] init];
UITabBarItem *contactsTabBarItem …Run Code Online (Sandbox Code Playgroud) 好的,这是我的程序中的一个方法,它一直给出EXC_BAD_ACCESS错误并崩溃.我在下面说明了这一行.questionsShown是一个readwrite属性,指向一个NSMutableArray,我在程序的早期点初始化容量为99.当我调试时,就所分配的属性而言,所有内容都显得正常.我认为内存管理一定存在问题,但我在查找问题时遇到了严重问题.在此先感谢您的帮助.
@synthesize questionList;
@synthesize questionLabel;
@synthesize questionsShown;
-(IBAction)next{
int numElements = [questionList count];
int r;
if (myCount == numElements){
[questionLabel setText:@"You have seen all the questions, click next again to continue anyways."];
[questionsShown release];
questionsShown = [[NSMutableArray alloc] initWithCapacity:99];
myCount = 0;
}
else {
do {
r = rand() % numElements;
} while ([questionsShown indexOfObjectIdenticalTo:r] != NSNotFound);
NSString *myString = [questionList objectAtIndex:(NSUInteger)r];
[questionLabel setText:myString];
myCount++;
[questionsShown addObject:r]; //results in crash with message EXC_BAD_ACCESS
myCount++;
}
}
Run Code Online (Sandbox Code Playgroud) 调用这行代码时,我得到一个错误的访问(objc_msgsend):
self.currentGameTeam = nil;
Run Code Online (Sandbox Code Playgroud)
其中"currentGameTeam"在接口中为名为"MCState"的类定义为:
MNAvailableTeamContext *currentGameTeam;
Run Code Online (Sandbox Code Playgroud)
我为它合成了一个属性:
@property (retain) MNAvailableTeamContext *currentGameTeam;
Run Code Online (Sandbox Code Playgroud)
设置NSZombieEnabled后,控制台显示:
*** -[MNAvailableTeamContext release]: message sent to deallocated instance 0x5b3eba0
Run Code Online (Sandbox Code Playgroud)
调试器跟踪显示它来自合成的setter代码:
#3 0x0001fa96 in -[MCState setCurrentGameTeam:] at MCState.m:44
Run Code Online (Sandbox Code Playgroud)
我已经看了几个其他问题和线程,我找不到适用于我的案例的答案.我不明白为什么如果我合成了属性并且我将它设置为nil会有一个糟糕的访问.特别奇怪的是MCState中至少有3个其他属性的定义和使用方式与currentGameTeam完全相同,唯一的区别是它们是不同的类型:
MNUserContext *storedUser;
MNActiveGameContext *storedGame;
MNAvailableUserContext *storedGameUser;
MNAvailableTeamContext *storedGameTeam;
Run Code Online (Sandbox Code Playgroud)
和
@property (retain) MNUserContext *currentUser;
@property (retain) MNActiveGameContext *currentGame;
@property (retain) MNAvailableUserContext *currentGameUser;
@property (retain) MNAvailableTeamContext *currentGameTeam;
Run Code Online (Sandbox Code Playgroud)
和
@synthesize currentUser;
@synthesize currentGame;
@synthesize currentGameUser;
@synthesize currentGameTeam;
Run Code Online (Sandbox Code Playgroud)
最后
self.currentUser = userContext;
self.currentGame = nil;
self.currentGameUser = nil;
self.currentGameTeam = nil; // Error …Run Code Online (Sandbox Code Playgroud) 我正在使用XCode在C中创建命令行程序.在运行程序时,它最初会执行它应该执行的操作(询问我的文件路径).但是,当我键入有效的和现有的文件路径时,它会给我以下错误:
Program received signal: “EXC_BAD_ACCESS”. sharedlibrary apply-load-rules all (gdb)
Run Code Online (Sandbox Code Playgroud)
我的程序中有两个警告,这两个警告都与strcat函数有关.警告是:
warning: implicit declaration of function 'strcat'
Run Code Online (Sandbox Code Playgroud)
和
warning: incompatible implicit declaration of built-in function 'strcat'
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我的程序没有正常执行.
谢谢,迈克
我的代码发布在下面:
#include "stdlib.h"
int main (void)
{
char *string1;
printf("Type in your file path: ");
scanf("%s", string1);
char *string2 = "tar czvf YourNewFile.tar.gz ";
strcat(string2, string1);
system(string2);
}
Run Code Online (Sandbox Code Playgroud)
也许它与分配字符有关?
我正在为iOS创建一个简单的OpenGL ES 2.0应用程序,每当我调用glDrawArrays时.我发现这是在我之前为我的两个属性(位置和颜色)调用glEnableVertexAttribArray时发生的,然后发现glGetAttribLocation返回1表示位置,0表示颜色,然后还发现glGetUniformLocation为我的MVP返回0矩阵.我不知道,如果0是有效的值,或者为什么glEnableVertexAttribArray似乎是造成EXC_BAD_ACCESS时调用glDrawArrays被调用.
这是我的代码:
compileShaders函数:
-(void)compileShaders {
GLuint vertShader = [self compileShader:@"Shader" ofType:GL_VERTEX_SHADER];
GLuint fragShader = [self compileShader:@"Shader" ofType:GL_FRAGMENT_SHADER];
GLuint program = glCreateProgram();
glAttachShader(program, vertShader);
glAttachShader(program, fragShader);
glLinkProgram(program);
GLint success;
glGetProgramiv(program, GL_LINK_STATUS, &success);
if (success == GL_FALSE) {
GLchar messages[256];
glGetProgramInfoLog(program, sizeof(messages), 0, &messages[0]);
NSLog(@"%@", [NSString stringWithUTF8String:messages]);
exit(1);
}
glUseProgram(program);
_positionSlot = glGetAttribLocation(program, "position");
_colorSlot = glGetAttribLocation(program, "color"); //Returns 0
_mvpSlot = glGetUniformLocation(program, "MVP"); //Returns 0
if (!_positionSlot || !_colorSlot || !_mvpSlot) {
NSLog(@"Failed to retrieve the locations of the …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我有一个UIViewController,由另一个ViewController的导航控制器推送.它包含一些视图,按钮,scrollView和加速度计支持.当我敲击navigationController的"返回"按钮,应用程序崩溃,没有任何日志消息,除了这一个:"警告:无法读取符号/Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.3(8J2)/符号/开发者/usr/lib/libXcodeDebuggerSupport.dylib(找不到文件).(gdb)"调试器将我链接到main.m中的这一行:
int retVal = UIApplicationMain(argc, argv, nil, nil);
Run Code Online (Sandbox Code Playgroud)
用"EXEC_BAD_ACCESS"这是什么意思?
编辑: 大家都是对的.问题出在加速度计上.我设置了委托([UIAccelerometer sharedAccelerometer] .delegate = self;)并没有删除它.这就是我的代码中没有用于链接的调试器的行的原因.我刚添加了这个:
- (void)viewWillDisappear:(BOOL)animated {
[UIAccelerometer sharedAccelerometer].delegate = nil;
}
Run Code Online (Sandbox Code Playgroud)
问题消失了.因此,如果您正在使用任何设备功能,请小心代表.
iphone crash exc-bad-access objective-c navigationcontroller
我正在开发iPhone/iPod应用程序.以下代码是UIViewController的.m文件.我得到以下内容:
Thread 1: EXC_BAD_ACCESS (code=2......
Run Code Online (Sandbox Code Playgroud)
当我点击以下行时:
cell.textLabel.text = [datasource objectAtIndex:indexPath.row];
Run Code Online (Sandbox Code Playgroud)
我知道这通常发生在您发布对象后尝试访问对象时,但在尝试访问它之前我不会释放它.我已附上以下完整代码.
任何帮助都很感激!
#import "HomePage.h"
#import "HusbandryRecordsMain.h"
#import "TaskManagerMain.h"
#import "AnimalInventoryMain.h"
#import "FeedInventoryMain.h"
@implementation HomePage
@synthesize options, datasource;
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad {
[self setupArray];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(void)setupArray{
options = [NSMutableArray arrayWithObjects:@"Husbandry Records", @"Task Manager", @"Feeder Inventory", …Run Code Online (Sandbox Code Playgroud) 因此,对于整个UIAppearance方法进行处理并迅速进行处理,我还是一个新手。欢呼声中没有大量的文档资料。
我正在尝试通过UIAppearance设置边框半径,其中包括:
CircleButton.appearance.roundBorderRadius = 9
Run Code Online (Sandbox Code Playgroud)
我的CircleButton类实现:
public class CircleButton : UIButton{
@nonobjc var roundBorderRadius: CGFloat? {
get { return self.layer.cornerRadius }
set {
self.layer.cornerRadius = newValue!
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我将情节提要中的所有内容都连接到包含CircleButton的ViewController。没有编译或生成错误。
但是,在运行时我得到了:
在以下位置出现“线程1:EXC_BAD_ACCESS”错误:
CircleButton.appearance.roundBorderRadius = 9
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
我有一个带有3个视图控制器的应用程序,这些应用程序被推到导航控制器堆栈上。
(A) -> (B) -> (C)
(A)在viewWillAppear以下位置注册通知:
NotificationCenter.default.addObserver(self, selector: #selector(reload), name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)
Run Code Online (Sandbox Code Playgroud)
和(A)在viewWillDisappear以下位置注销:
NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)
Run Code Online (Sandbox Code Playgroud)
另外(A)注销,deinit()但是从不调用。
现在(B)被压入堆栈,并为相同的事件注册/注销(A)。
现在(C)被压入堆栈,触发计算并弹回(B)。稍后(B)出现时,计算完成,并触发通知:
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "DATA_CHANGED"), object: nil)
Run Code Online (Sandbox Code Playgroud)
但这导致
线程1:EXC_BAD_ACCESS
我确定通知是问题所在,因为我拼错了通知名称,然后没有发生崩溃。并且(A)和(B)仍然没有被释放,因为它们位于堆栈中。我在Profiler中找不到任何僵尸。
知道可能是什么问题吗?
我正在使用XCode 9beta6和Swift 4。
exc-bad-access ×10
iphone ×5
ios ×4
objective-c ×4
swift ×2
c ×1
command-line ×1
crash ×1
malloc ×1
null ×1
opengl-es ×1
properties ×1
stack-trace ×1
uialertview ×1
uiappearance ×1
xcode ×1