在我的头文件中,我有这个代码:
@interface TableViewController : UIViewController
{
IBOutlet UITableView *tblListData;
NSArray *arryData;
}
Run Code Online (Sandbox Code Playgroud)
在我的类声明文件中,我有这个实现:
- (void)viewDidLoad
{
arryData = [[NSArray alloc] initWithObjects:@"iPhone",@"iPod",@"MacBook",nil];
[super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)
现在我得到这个Xcode警告:NSArray may not respond to -addObject对于以下代码:
- (IBAction)AddButtonAction:(id)sender
{
[arryData addObject:@"Mac Mini"];
[tblListData reloadData];
}
Run Code Online (Sandbox Code Playgroud)
而且,果然,我NSArray没有回应addObject!:(
我该怎么办?
我班上有一个属性,这是一个NSArray.我保留了这个房产.
我的问题是,在不泄漏并使保留计数过高的情况下,将对象添加到该数组的正确方法是什么?
这就是我正在使用的:
.h:
NSArray *foodLocations;
@property (nonatomic, retain) NSArray *foodLocations;
Run Code Online (Sandbox Code Playgroud)
//我确保在dealloc中合成并释放属性.
.m
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *tempFood = [[NSArray alloc] initWithArray:[self returnOtherArray]];
self.foodLocations = tempFood;
[tempFood release];
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
如果我想返回一个像这样的不可变数组+ (NSArray *)ids但是在这个方法中我声明了一个NSMutableArray因为我想用它来排序它-sortUsingSelector:.
返回此方法非常有效.
但编写声明返回方法应该是一种类型而实际类型是另一种类型的代码是否"没问题"?
这是否有效,因为它NSMutableArray是一个子类NSArray?
实际的回报值是一个NSArray还是一个NSMutableArray?
我的价值NSArray包括重复.我发现重复但现在我怎么能找到没有.他们重复?
我想存储一个数组NSUserDefault,然后,我放入applicationDidEnterBackground
[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"];
Run Code Online (Sandbox Code Playgroud)
并在 application didFinishLaunchingWithOption
myArray= [[NSMutableArray alloc]
initWithArray:[[NSUserDefaults standardUserDefaults]
objectForKey:@"myArray"]];
Run Code Online (Sandbox Code Playgroud)
它可以用于多任务设备,但对于非多任务设备,我该如何解决?
我正在构建一个利用NSCoding将NSObject保存到documentPath的应用程序.我这样做没有问题,我只是对某事感到好奇.
我有MACompany,它实现了NSCoding委托方法.
- (void) encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:address_1 forKey:kAddress_1];
[encoder encodeObject:address_2 forKey:kAddress_2];
[encoder encodeObject:city_town forKey:kCity_Town];
[encoder encodeObject:company_name forKey:kCompany_Name];
[encoder encodeObject:country forKey:kCountry];
[encoder encodeObject:date_added forKey:kDate_Added];
[encoder encodeObject:fax forKey:kFax];
[encoder encodeObject:parent_company_website forKey:kWebsite];
[encoder encodeObject:postal_code forKey:kPostal_Code];
[encoder encodeObject:state_province forKey:kState_Province];
[encoder encodeObject:type forKey:kType];
[encoder encodeObject:stores forKey:kStores]; //NSArray of custom NSObjects
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我有一个自定义NSObjects(MAStore)的NSArray.这些对象中的每一个也实现了相同的NSCoding.
但是,我的问题是,当我encodeWithCoder:(NSCoder *)encoder在MAStore中调用方法,并且它到达时[encoder encodeObject:stores forKey:kStores],storesNSArray中存储的所有对象是否都具有encoderWithCoder:(NSCoder *)encoder调用的方法?
编辑
我之所以这么说的原因是我想知道在我投入时间做这样的事情之前它是否会起作用.我有多个带有NSArrays的自定义NSObject,它们包含更多自定义NSObject.要找到它不起作用将是一个漫长的过程.
考虑以下NSArray:
NSArray *dataSet = [[NSArray alloc] initWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:@"abc", @"key1", @"def", @"key2", @"hij", @"key3", nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"klm", @"key1", @"nop", @"key2", nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"qrs", @"key2", @"tuv", @"key4", nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"wxy", @"key3", nil],
nil];
Run Code Online (Sandbox Code Playgroud)
我能够过滤此数组以查找包含密钥的字典对象 key1
// Filter our dataSet to only contain dictionary objects with a key of 'key1'
NSString *key = @"key1";
NSPredicate *key1Predicate = [NSPredicate predicateWithFormat:@"%@ IN self.@allKeys", key];
NSArray *filteretSet1 = [dataSet filteredArrayUsingPredicate:key1Predicate];
NSLog(@"filteretSet1: %@",filteretSet1);
Run Code Online (Sandbox Code Playgroud)
适当回报:
filteretSet1: (
{
key1 = abc;
key2 = def;
key3 …Run Code Online (Sandbox Code Playgroud) 是否有可能在objective-c中定义宏中的数组.
我有一个NSDictionary包含许多不同类型的对象实例(NSArrays,NSDictionaries,NSStrings,NSNumbers,等...).许多NSDictionaries并NSStrings拥有自己的嵌套NSDictionaries和NSArrays.
我在整个层次循环,从顶部到底部,以及如何转换的所有实例NSDictionaries,并NSArrays以NSMutableDictionaries和NSMutableArrays分别?
是否有任何简单的"递归制作可变副本"功能我不知道?如果没有,我是否只需要反复循环和键入检查?我可以随时更换,还是重建整个层次结构?
似乎有不同的实例化NSArrays的方法(NSDictionary和其他一些方法相同).
我知道:
[NSArray array][NSArray new]@[] [[NSArray alloc] init]出于可读性的原因,我经常坚持[NSArray array],但所有这些之间有什么区别,他们都真的这样做吗?
nsarray ×10
objective-c ×10
ios ×6
iphone ×3
cocoa ×2
cocoa-touch ×1
duplicates ×1
foundation ×1
macros ×1
nscoding ×1
nsdictionary ×1
nsobject ×1
nspredicate ×1
recursion ×1
return-type ×1
xcode ×1
xcode4.2 ×1