簡體   English   中英

[__NSArrayI length]:無法識別的選擇器已發送到實例

[英][__NSArrayI length]: unrecognized selector sent to instance

我試圖將數據從集合視圖控制器傳遞到表視圖控制器,但是當我認為一切正常時,就會出現此問題。. 無法識別的選擇器發送到實例我的代碼是這樣的:

ViewController.m(集合視圖控制器)

#import "ViewController.h"
#import "ColViewCell.h"
#import "DetailViewController.h"

@interface ViewController ()
{
// Private member varibles
NSArray *_arrayOfImages;
NSArray *_arrayOfNames;

// Array de ingredientes
NSArray *_arrayOfCeviche;
NSArray *_arrayOfTacacho;
NSArray *_arrayOfAnticucho;
NSArray *_arrayOfPapita;
NSArray *_arrayOfParihuela;
NSArray *_arrayOfLomo;

NSArray *_arrayOfIngredients;
}

- (void)viewDidLoad
{
 [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

// Array que contiene los titulos
_arrayOfNames = @[@"Anticucho", @"Arroz Chaufa", @"Cebiche", @"Pachamanca", @"Papa a la Huancaina", @"Parihuela", @"Picante de cuy", @"Tacacho con cecina", @"Pollo a la brasa", @"Lomo saltado"];

// Array que contiene las imagenes
_arrayOfImages = @[@"Anticucho.jpg", @"chaufa.jpg", @"ceviche.jpg", @"pachamanca.jpg", @"papita.jpg", @"parihuela.jpg", @"cuy.jpg", @"tacacho.jpg", @"brasa.jpg", @"lomo.jpg"];

// Arrays que de los ingredientes
_arrayOfCeviche = @[@"Quesito", @"Limon", @"Choclito", @"Cocinita", @"La lechesita", @"La miradita", @"La weuabdita", @"La cagada", @"Ptm Toy Jodido XD", @"Que emoción", @"Wiiiiiii"];

_arrayOfLomo = @[@"Que novedada", @"jajajaja que buena", @"Lukita", @"losisisisi", @"maniserio", @"joder", @"joselet", @"lskadlkdl", @"bah"];

_arrayOfPapita = @[@"que buena!", @"csm!!", @"que genio!", @"novedades", @"que rico!!", @"coger delicisioso", @"Mffffff"];

_arrayOfParihuela = @[@"Un culaso", @"Chambon", @"Noveades", @"que hacer", @"asu macho", @"Espero que este bien", @"Así es la vida la chamba", @"Debo aprender mas!!"];

_arrayOfTacacho = @[@"Tacachin", @"Lalilinnn", @"Masinisn", @"Joder", @"Ojojoojojo", @"Lista hermosa!"];

_arrayOfAnticucho = @[@"Me encanta Objective-c", @"Hermosisimo", @"Me encanta xcode!", @"Que hermoso es esto", @"Debe ser un chambon total", @"jajajaja novedades", @"Lol supremo"];


 ***NSArray that contains all the arrays***
_arrayOfIngredients = @[_arrayOfCeviche, _arrayOfLomo, arrayOfAnticucho, _arrayOfParihuela, _arrayOfTacacho, _arrayOfPapita];

}

我將數據從集合視圖傳遞到表視圖的方法

  // Method to pass data from a view to another view
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

if ([segue.identifier isEqualToString:@"showDetail"]) {

    NSIndexPath *indexPath = [[self.collectionView indexPathsForSelectedItems] objectAtIndex:0];

    DetailViewController *dvc = [segue destinationViewController];
    dvc.Titulos = [_arrayOfIngredients objectAtIndex:indexPath.item];
  }
}

我的DetailViewController.h(表視圖控制器)

#import <UIKit/UIKit.h>

@interface DetailViewController : UITableViewController

@property (strong, nonatomic) NSString *Titulos;

@end

我的DetailViewController.m(表視圖控制器)

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// Configure the cell...

***Xcode tell me this line is the problem...***
cell.textLabel.text = self.Titulos;

return cell;
}

我的代碼有什么問題??? u

dvc.Titulos = [_arrayOfIngredients objectAtIndex:indexPath.item];

如果_arrayOfIngredients是一個包含多個NSArray對象的NSArray,則您正在將一個數組傳遞到Titulos對象中。

Titulos是一個NSString,所以當一個UILabel嘗試訪問- length上的NSString財產Titulos是一個NSArray而不是一個的NSString會發生崩潰。


在您的DetailViewController上,我假設您要從_arrayOfIngredients中傳遞一個子數組。

#import <UIKit/UIKit.h>

@interface DetailViewController : UITableViewController

@property (strong, nonatomic) NSArray *Titulos;

@end

然后,您必須像配置ViewController一樣配置DetailViewController,但要使用Titulos數組。

NSArray不響應length ,它響應count 在以下行中:

dvc.Titulos = [_arrayOfIngredients objectAtIndex:indexPath.item];

您正在將NSArray傳遞給采用NSString的屬性,因此它有時會嘗試獲取字符串的長度,而是在NSArray對象上調用length方法,該方法對此沒有響應,因此崩潰。

驗證碼:

for (int j=0; j<enumKeyReferenceArray.count; j++) {
  NSString *attri =[enumKeyReferenceArray valueForKey:@"BeltCondition"];      
}

問題是我忘了告訴編譯器我需要從哪個索引元素開始。

正確的行應為:

NSString *attri =[enumKeyReferenceArray[j] valueForKey:@"BeltCondition"]; 

我有一個NSArray * dataArray來填充tableView

我使用的是什么原因

self.dataArray = [NSArray arrayWithObject:anotherArray];

我應該做的是

self.dataArray = [NSArray arrayWithArray:anotherArray]

因此,在您的情況下,您應該檢查dataArray中包含的內容

就我而言,問題是通過API數據傳入的數據是:

{
    "status": true,
    "message": "Order listed successfully.",
    "data": [
        {
            "order_id": "9",
            "restaurant_name": "Demo Restaurant",
            "payment_token": "Test162R25892",
            "payment_status": "Approved",
            "subtotal": "480.00",
            "final_amount": "561.00",
            "vat": "57.00",
            "service_fee": "24.00",
            "delivery_fee": "0.00",
            "discount": "0.00",
            "customer_type": "member",
            "created": "2016-02-28 12:17:21",
            "order_status": "complete"
        }
    ]
}

通過NSJSONSerialization轉換為NSDictionary之后,它是

{
    data =     (
                {
            created = "2016-02-28 12:17:21";
            "customer_type" = member;
            "delivery_fee" = "0.00";
            discount = "0.00";
            "final_amount" = "561.00";
            "order_id" = 9;
            "order_status" = complete;
            "payment_status" = Approved;
            "payment_token" = Test162R25892;
            "restaurant_name" = "Demo Restaurant";
            "service_fee" = "24.00";
            subtotal = "480.00";
            vat = "57.00";
        }
    );
    message = "Order listed successfully.";
    status = 1;
}

我只是想念JSON的[和括號(在Dict中,在數據內部並像這樣解析)

lblDate.text = [[dict valueForKey:@"data"] valueForKey:@"created"]

發生異常是因為我試圖發送一個數組值來標記文本。 只需仔細查看要處理的數據即可。

就我而言,這是一個豆莢的問題。 固定與pod update

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM