我试图更好地理解Cocoa的键值编码(KVC)机制.我已经阅读了Apple的Key-Value Programming Guide,但对于某些KVC方法如何搜索密钥仍然有点困惑.特别是mutableArrayValueForKey : .
下面我将解释我如何理解valueForKey:KVC"getters"的工作方式.然后我将讨论有关mutableArrayValueForKey的问题.
有七种不同的"getter"KVC方法:
- (id)valueForKey:(NSString *)key;
- (id)valueForKeyPath:(NSString *)keyPath;
- (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;
- (NSMutableArray *)mutableArrayValueForKey:(NSString *)key;
- (NSMutableArray *)mutableArrayValueForKeyPath:(NSString *)keyPath;
- (NSMutableSet *)mutableSetValueForKey:(NSString *)key;
- (NSMutableSet *)mutableSetValueForKeyPath:(NSString *)keyPath;
Run Code Online (Sandbox Code Playgroud)
在Property中搜索Value(名为myKey)时,Apple的文档声明valueForKey:这样搜索:
-getMyKey,-myKey和-isMyKey(按此顺序)如果没有找到,它会尝试这些有序的,多对多的getter(NSArray):
// Required:
- (NSUInteger)countOfMyKey;
// Requires At Least One:
- (id)objectInMyKeyAtIndex:(NSUInteger)index;
- (NSArray *)myKeyAtIndexes:(NSIndexSet *)indexes;
// Optional (improves performance):
- (void)getMyKey:(KeyClass **)buffer range:(NSRange)inRange;
Run Code Online (Sandbox Code Playgroud)接下来,它尝试这些无序的,多对多的getter(NSSet):
- (NSUInteger)countOfMyKey;
- (NSEnumerator *)enumeratorOfMyKey; …Run Code Online (Sandbox Code Playgroud)我偶然发现了以下设置for循环的快捷方式(与我一直使用的教科书示例相比,快捷方式):
for (Item *i in items){ ... }
Run Code Online (Sandbox Code Playgroud)
与较长的格式相反:
for (NSInteger i = 0; i < [items count]; i++){ ... } //think that's right
Run Code Online (Sandbox Code Playgroud)
如果我使用较短的版本,有没有办法删除当前正在迭代的项目(即"我")?或者我需要使用更长的格式?
我有一个NSMutableArray,我正在尝试存储和访问一些结构.我该怎么做呢?'addObject'给我一个错误,说"addObject的参数1的不兼容类型".这是一个例子('in'是NSFileHandle,'array'是NSMutableArray):
//Write points
for(int i=0; i<5; i++) {
struct Point p;
buff = [in readDataOfLength:1];
[buff getBytes:&(p.x) length:sizeof(p.x)];
[array addObject:p];
}
//Read points
for(int i=0; i<5; i++) {
struct Point p = [array objectAtIndex:i];
NSLog(@"%i", p.x);
}
Run Code Online (Sandbox Code Playgroud) 我有一个NSMutableArray的NSNumbers.基本上我只是想检查NSNumbers数组中是否有任何值=某个值.
我可以遍历数组,逐个检查,这绝不是最佳选择.
我也试过并且使用失败containsObject,因为这只有在id相同的情况下才有效.
我读了一些关于NSPredicate这个问题的解决方案,但我不确定如何使用它NSArray.
任何答案都表示赞赏.
谢谢
我需要检查某个数组是否包含某个对象,如果是,则删除该对象.如果它没有那个对象,则可以使用函数将其添加到数组中.问题是始终添加对象,因为检查语句始终返回false.
这是我目前的功能:
- (void) myFunction:(NSString *)parameter {
if (![myMutableArray containsObject:parameter]) {
[myMutableArray addObject:parameter];
NSLog(@"%@ added", parameter);
} else {
[myMutableArray removeObject:parameter];
NSLog(@"%@ deleted", parameter);
}
}
Run Code Online (Sandbox Code Playgroud) 在我的iphone项目(启用ARC)中,我有一个nsmuatble数组,其中包含大约5个托管对象(从核心数据中检索),在某些情况下,我需要从中删除所有对象nsmutablearray
我使用了以下方法来删除对象,但在崩溃日志的两种情况下它都崩溃了 -[__NSArrayI removeObject:]: unrecognized selector sent to instance 0xa391640
if (surveys && [surveys count]>0)
{
[surveys removeAllObjects];
surveys = [[NSMutableArray alloc]init];
}
Run Code Online (Sandbox Code Playgroud)
我也试过
if (surveys && [surveys count]>0)
{
for(Survey *obj_Survey in surveys)
{
[surveys removeObject:obj_Survey];
}
surveys = [[NSMutableArray alloc]init];
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我如何清空该阵列,任何建议都会被提前感谢
我想addObject的NSMutableArray到NSMutableArray,所以我怎么能在迅速实现这一目标.并检索它,所以请帮助我,因为现在我正在迅速学习.
间接地说,我想二维数组手段NSMutableArray的NSMutableArray.
//The below 2 lines iterative!
var dict:NSMutableDictionary? = NSMutableDictionary();
linePointsArray!.addObject(dict!);
// and below 2 line is execute after complete the above iteration
arrLine!.addObject(linePointsArray!);
linePointArray!.removeAllObject();
//after that the above whole process is done iterative.
Run Code Online (Sandbox Code Playgroud) 我有一个for循环.在那个循环里面,我想填充NSArray一些对象.但我没有看到任何让我这样做的方法.我事先知道有多少物品.我想避免使用NSMutableArray,因为有些人告诉我这是一个非常大的开销和性能制动相比NSArray.
我有这样的事情:
NSArray *returnArray = [[NSArray alloc] init];
for (imageName in imageArray) {
UIImage *image = [UIImage imageNamed:imageName];
//Now, here I'd like to add that image to the array...
}
Run Code Online (Sandbox Code Playgroud)
我查看了文档NSArray,但是如何指定那里有多少元素?或者我必须真的用NSMutableArray它吗?
我有以下代码,我想使用NSMutable数组而不是NSArray你能告诉我如何加载NSMutable数组,因为当前的方法不起作用.
-(void) whatever{
NSData *htmlData = [[NSString stringWithContentsOfURL:[NSURL URLWithString: @"http://www.objectgraph.com/contact.html"]] dataUsingEncoding:NSUTF8StringEncoding];
TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:htmlData];
NSArray *titles = [xpathParser search:@"//h3"]; // get the page title - this is xpath notation
TFHppleElement *title = [titles objectAtIndex:0];
NSString *myTitles = [title content];
NSArray *articles = [xpathParser search:@"//h4"]; // get the page article - this is xpath notation
TFHppleElement *article = [articles objectAtIndex:0];
NSString *myArtical = [article content];
Run Code Online (Sandbox Code Playgroud)
我试过了 :
NSMutableArray *titles = [xpathParser search:@"//h3"];
Run Code Online (Sandbox Code Playgroud)
但它确实加载了这些值?
我搜索了很多,但没有找到有用的代码或教程.
在我的应用程序中,我有一个可变数组,每60秒更新一次.
数组中的对象由多个视图控制器中的表视图显示.
我只想在数组中的值更改或更新时自动重新加载表视图.
为此,我想在可变数组上添加观察者,即当数组中的值发生变化时,它应该调用特定的方法,例如
-(void)ArrayUpdatedNotification:(NSMutableArray*)array
{
//Reload table or do something
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
nsmutablearray ×10
objective-c ×7
ios ×4
cocoa ×3
iphone ×3
nsarray ×2
arrays ×1
nsnumber ×1
nspredicate ×1
removeall ×1
struct ×1
swift ×1
uikit ×1
uitableview ×1