我认为这是一个奇怪的错误,但当然我对iPhone开发相对较新,所以它可能毕竟不是那么奇怪.
我有一个我正在跟踪的对象数组(NSMutableArray)(每次用户触摸按钮时都会添加一个对象)我正在尝试做的是当数组达到某个值时我添加了新对象到数组的开头,然后删除数组中的最后一个对象.当我单步执行我的代码时,一切正常,对象被删除但是应用程序崩溃了......当应用程序崩溃并且应用程序中没有循环或计时器时,调试器不在任何代码行上,所以我可以'想到其他任何正在运行的东西.
这是在崩溃之前执行的代码
if([objectArray count] > 10)
{
MyObject *objectToRemove = [[MyObject alloc] init];
objectToRemove = [objectArray objectAtIndex:10];
[objectArray removeObjectAtIndex:10];
[objectToRemove removeFromSuperview];
}
Run Code Online (Sandbox Code Playgroud)
这段代码的要点是,每当用户触摸一个按钮时,一个对象被添加到屏幕并显示,然后当对象的数量达到10并且用户再次触摸该按钮时,添加的第一个对象被移除并且显示新对象.如果我注释掉removeObjectAtIndex行,一切都按预期工作,但数组继续增长.
在删除UIview并且应用程序的行为方式相同之后,我也尝试删除该对象.如果我尝试从不同索引(IE 3)的数组中删除一个对象,应用程序不会崩溃,但它不会给我我预期的结果.但就像我说代码运行正常,当我在执行行之前和之后检查数组的计数时,值分别为11和10.
您可以提供任何帮助,我们将不胜感激,
BWC
我有一个可变数组,其中包含可变字典,其中包含键的纬度,经度和id的字符串.一些纬度和经度值是相同的,我想从数组中删除重复项,所以我每个位置只有一个对象.
我可以枚举我的数组并使用第二个枚举查看每个对象来查找具有不同ID但具有相同纬度和经度的对象,但是如果我尝试删除该对象,我将在枚举期间静音该数组.
有没有办法在枚举时从数组中删除对象,所以我只在数组更新时枚举当前的对象集?
希望这个问题有道理.
谢谢,豪伊
这是arrayOfPerformances被破坏了.
这是数组的.h:
NSMutableArray * arrayOfPerformances;
}
@property (nonatomic, retain) NSMutableArray * arrayOfPerformances;
Run Code Online (Sandbox Code Playgroud)
和.m有循环:
[dataArray release];
[dataDictionary release];
dataArray = [[NSMutableArray alloc] init];
dataDictionary = [[NSMutableDictionary alloc] init];
NSDate * CurrentDate = start;
int i = 0;
NSMutableArray * arrayOfPerformancesForCurrentDate = [[NSMutableArray alloc] init];
while(YES)
{
i = 0;
if ([arrayOfPerformancesForCurrentDate count] > 0)
{
[arrayOfPerformancesForCurrentDate removeAllObjects];
}
for (i; i < self.arrayOfPerformances.count; i++)
{
Performance * performanceItem = [[Performance alloc] init];
performanceItem = [self.arrayOfPerformances objectAtIndex:i];
NSString * sPerformanceDate = [performanceItem.sDate …Run Code Online (Sandbox Code Playgroud) 我在UIImageView对象中使用了一些NSMutableArray.
当我退出应用程序时,我收到此异常消息:
[__NSArrayM synchronize]:无法识别的选择器发送到实例0x4b3a910
在AppDelagate.m中
NSMutableArray * aViewArray;
...
currentView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:displayImageNamed]];
[aViewArray addObject:currentView];
[currentView release];
Run Code Online (Sandbox Code Playgroud)
在ViewController.m中
UIImageView *myImage = [aViewArray objectAtIndex:i];
myImage.xxx = yyy ;
Run Code Online (Sandbox Code Playgroud) 我在释放和泄漏方面遇到了麻烦.我有一个不会停止泄漏的阵列!这是我的代码:我已经在.h中声明了otherValuesArray我尝试了数百种不同的方式,包括autorelease.
谁能告诉我我做错了什么?谢谢
otherValuesArray = [[NSMutableArray array] retain]; //89% leak
NSString *tempString;
tempString = [[NSString stringWithFormat:@"%d",challengeID] autorelease];
[otherValuesArray addObject:[NSString stringWithString:tempString]]; // 11% leak
tempString=nil;
tempString = [[NSString stringWithFormat:@"%d",scoreMultiQuant] autorelease];
[otherValuesArray addObject:[NSString stringWithString:tempString]];
tempString=nil;
int challengeDoneTemp = [challenges otherValues:otherValuesArray];
tempString=nil;
[tempString release];
otherValuesArray = nil;
[otherValuesArray release];
Run Code Online (Sandbox Code Playgroud) 我有一个NSMutableArray的问题...在我的函数中填充NSMutableArray(readRoutes)后我无法提取对象....在readRoutes函数内我可以...我无法想象问题在哪里..
首先,NSMutableArray在readRoutes方法中填充Route对象...(在RoutesListView内部文件中)(我需要用这些Route对象填充TableView单元格...)
这是Route.h文件:
@interface Route : NSObject {
NSString *routeId;
NSString *routeDirection;
NSString *routeName;
NSString *routeCode;
}
@property (nonatomic,retain) NSString *routeId;
@property (nonatomic,retain) NSString *routeDirection;
@property (nonatomic,retain) NSString *routeName;
@property (nonatomic,retain) NSString *routeCode;
-(id)initWithName:(NSString *)name direction:(NSString *)d routeId:(NSString *)rid code:(NSString *)c;
@end
Run Code Online (Sandbox Code Playgroud)
Route.m文件:
#import "Route.h"
@implementation Route
@synthesize routeId;
@synthesize routeDirection;
@synthesize routeName;
@synthesize routeCode;
-(id)initWithName:(NSString *)name direction:(NSString *)d routeId:(NSString *)rid code:(NSString *)c{
self.routeId=rid;
self.routeName=name;
self.routeDirection=d;
self.routeCode=c;
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
现在这是RoutesListView.h文件(UITableViewController)
#import <UIKit/UIKit.h>
#import "Route.h"
@interface RoutesListView : UITableViewController …Run Code Online (Sandbox Code Playgroud) 我正在尝试这段代码:
NSString* str1 = @"Toto";
NSMutableArray* arr = [NSMutableArray array];
[arr addObject:[NSNull null]];
[arr addObject:@"toto"];
[arr addObject:[NSNull null]];
[arr addObject:@"Toto"];
[arr addObject:[NSNull null]];
[arr addObject:str1];
NSLog(@"Tableau à %d elements : %@", [arr count], arr);
[arr removeObjectIdenticalTo:str1];
NSLog(@"Tableau à %d elements : %@", [arr count], arr);
Run Code Online (Sandbox Code Playgroud)
为什么removeObjectIdenticalTo:str1在这里做同样的事情比removeObject:str1或者 removeObjectIdenticalTo:@"Toto",因为它应该是基于对象的地址?
我可以使用"lastObject"从NSMutableArray中获取最后一个元素.如果数组未初始化,则返回nil.是否有类似的方法或方法来获得第一个对象的效果?这对我很有帮助.
我通过按钮操作在数组中逐个添加数组中的文本字段,同样我想从最后一个一个一个地删除另一个按钮中的这些文本字段,我该怎么办我使用此代码添加
- (IBAction)btnAddTxtField:(id)sender {
// [self buttonPressed];
// currentIndex =0;
//
// int x = 132;
// int y = 550;
//
//
// UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake((currentIndex % 1) * x + 45, (currentIndex / 1) * y + 28, 214, 25)];
//
//
textField = [[UITextField alloc] initWithFrame:CGRectMake(76, ([txtFieldArray count] * 30), 191, 25)];
[textField setBorderStyle:UITextBorderStyleLine];
textField.font = [UIFont systemFontOfSize:20];
textField.placeholder = @"Enter text";
textField.autocorrectionType = UITextAutocorrectionTypeNo;
textField.keyboardType = UIKeyboardTypeDefault;
textField.returnKeyType = UIReturnKeyDone;
textField.clearButtonMode = UITextFieldViewModeWhileEditing; …Run Code Online (Sandbox Code Playgroud) var myArray : NSMutableArray = ["First", "Second","Third"]
var myArray = ["First", "Second","Third"]
我们什么时候应该在Swift中使用上面给出的Array类型声明.
nsmutablearray ×10
iphone ×6
ios ×3
objective-c ×3
xcode ×2
arrays ×1
cocoa ×1
cocoa-touch ×1
duplicates ×1
enumerate ×1
exception ×1
memory ×1
memory-leaks ×1
parsing ×1
swift ×1
uitextfield ×1